Consultas · valores únicos

DISTINCT

DISTINCT elimina filas repetidas del resultado de una consulta, sin modificar la tabla original.

Lectura: 5–7 minEjemplo comprobadoPráctica con pistas
Contenido de esta guía

Qué hace DISTINCT

DISTINCT conserva una sola copia de cada fila repetida en el resultado. Es útil cuando necesitas responder preguntas como «¿en qué ciudades hay clientes?» o «¿qué estados de pedido existen?», sin repetir el mismo valor muchas veces.

La tabla no cambia. La eliminación de duplicados ocurre únicamente en el conjunto de filas que devuelve el SELECT.

Cómo decide qué filas son iguales

DISTINCT se aplica a todas las expresiones seleccionadas. Con una columna compara esa columna; con varias, compara la combinación completa.

Estructura
SELECT DISTINCT columna_1, columna_2
FROM tabla;

Dos filas se consideran repetidas cuando no se distinguen por las expresiones seleccionadas. Por eso SELECT DISTINCT ciudad, activo puede devolver dos filas para Madrid: una para clientes activos y otra para inactivos.

NULL tiene una regla especial en la eliminación de duplicados: los motores habituales tratan dos NULL de la misma posición como no distintos para este propósito; SQLite lo documenta expresamente. Eso no significa que una comparación ordinaria NULL = NULL sea verdadera en un WHERE.

No uses DISTINCT como parche automático. Si una combinación con JOIN produce más filas de las esperadas, primero revisa la relación y la condición de unión. Eliminar duplicados puede esconder un error sin resolverlo.

Ejemplo guiado

Queremos saber qué ciudades aparecen en la tabla clientes:

SQL
SELECT DISTINCT ciudad
FROM clientes
ORDER BY ciudad;
Resultado comprobado
ciudad
A Coruña
Bilbao
Madrid
Sevilla
Valencia
Zaragoza

Madrid aparece en varias filas de la tabla, pero solo una vez en el resultado. ORDER BY no elimina duplicados: únicamente presenta los valores únicos en un orden predecible.

Error frecuente

Esperar que DISTINCT actúe sobre una sola columna

En SELECT DISTINCT ciudad, nombre, cada combinación de ciudad y nombre suele ser distinta. Si necesitas únicamente las ciudades, selecciona solo ciudad. Decide primero qué representa una fila del resultado.

Comprueba lo aprendido

Básica · resultado único

Enumera los estados de pedido

Escribe una consulta que devuelva cada valor de estado una sola vez desde pedidos. Ordena el resultado alfabéticamente.

Compatibilidad entre motores

La forma SELECT DISTINCT es común en los motores SQL principales. Algunas bases ofrecen extensiones para elegir una fila concreta dentro de cada grupo de duplicados; esas variantes no son portables. Para empezar, utiliza la forma estándar y controla el orden de manera explícita.

Qué debes recordar

  • DISTINCT afecta al resultado, no a los datos guardados.
  • Compara la combinación de todas las columnas seleccionadas.
  • No sustituye una condición de unión correcta.
  • Añade ORDER BY cuando el orden importe.

Conceptos relacionados

Fuentes técnicas consultadas