Tema SQL
DISTINCT
Tras calcular las filas del SELECT, elimina duplicados respecto al conjunto completo de columnas proyectadas. No «desduplica» filas físicas de la tabla, sino el resultado intermedio.
Descripción
DISTINCT comprime el resultado a combinaciones únicas de valores en las columnas listadas. Si seleccionas varias columnas, la unicidad es por la tupla completa. NULL se considera igual a NULL para deduplicación en el estándar SQL, aunque detalles pueden variar. Para contar valores distintos usa COUNT(DISTINCT columna). Evita DISTINCT innecesario sobre columnas ya únicas (p. ej. clave primaria) porque fuerza trabajo extra de ordenación o hash.
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
SELECT DISTINCT columna1 [, columna2 ...]
FROM tabla;
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- DISTINCT
- Palabra clave inmediatamente después de SELECT; afecta a todas las expresiones proyectadas conjuntamente.
- NULL
- Varias filas con NULL en las mismas columnas comparables pueden colapsar a una según motor y número de columnas en DISTINCT.
Ejemplos
Ejemplo 1
SELECT DISTINCT ciudad
FROM clientes
WHERE pais = 'ES';
Ejemplo 2
SELECT DISTINCT estado FROM pedidos;
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.