DISTINCT: valores y combinaciones únicas
BásicoSELECT DISTINCT elimina las filas repetidas del resultado. Se aplica a la fila completa: con dos columnas devuelve cada combinación distinta de las dos, no los valores únicos de la primera.
Sintaxis
SELECT DISTINCT columna_1, columna_2
FROM tabla;Ejemplo
SELECT DISTINCT
a.country AS pais,
a.genre AS genero
FROM artists AS a
WHERE a.country IN ('CL', 'PE')
ORDER BY pais, genero;Resultado
| pais | genero |
|---|---|
| CL | cueca urbana |
| CL | electrónica |
| CL | pop latino |
| CL | rock latino |
| CL | trap latino |
| PE | cumbia |
| PE | folclore |
| PE | pop latino |
| PE | reguetón |
| PE | salsa |
Cómo leerlo
Chile tiene 34 artistas en la tabla, pero solo aparecen 5 filas con CL: una por cada género distinto. pop latino aparece dos veces porque la combinación con el país es distinta (CL y PE). DISTINCT también trata a todos los NULL como un mismo valor: si hubiera artistas sin género, se vería una sola fila con NULL.
Error común
Así no
SELECT DISTINCT(a.country), a.genre
FROM artists AS a;Creer que DISTINCT(columna) aplica solo a esa columna. Los paréntesis no cambian nada: DISTINCT sigue mirando la fila completa y el resultado es el mismo que sin paréntesis. Para contar valores únicos de una columna se usa count(DISTINCT columna); para quedarte con una fila por país hay que agrupar o numerar filas.
En otros motores: PostgreSQL
PostgreSQL
SELECT DISTINCT ON (columna) …conORDER BYdevuelve una fila por cada valor de esa columna (por ejemplo, el último pedido de cada cliente). Es exclusivo de PostgreSQL; en los demás motores se resuelve conROW_NUMBER().
Estos fragmentos no se ejecutan en el curso: se muestran como referencia de cada motor.