CodeGym /Cursos /SQL SELF /Extrayendo valores únicos con DISTINCT

Extrayendo valores únicos con DISTINCT

SQL SELF
Nivel 6 , Lección 1
Disponible

A veces las bases de datos se parecen a una persona con mala memoria: lo apunta todo, pero se olvida de lo que ya ha apuntado. Al final abres una tabla con las ciudades de los clientes y hay diez "Berlín", cinco "Seattle" y un montón de repes más. Esto pasa si la misma ciudad aparece para diferentes clientes. Pero no querrás montar una campaña de publicidad para diez "Berlín" cuando en realidad es solo una ciudad, ¿a que no?

Para sacar solo los valores únicos —sin duplicados— hay un comando muy útil: DISTINCT. Es como una mopa mágica: de un solo golpe quita las filas repetidas y deja solo lo que realmente es diferente.

DISTINCT te permite extraer solo las filas únicas del resultado de una consulta. Esto viene genial cuando necesitas quitar datos repetidos, como por ejemplo:

  • Productos únicos en los pedidos.
  • Nombres únicos de clientes.
  • Combinaciones únicas de datos, como "ciudad + país".

¿Cómo funciona DISTINCT?

La sintaxis de DISTINCT es sencilla y clara, como suele pasar con SQL:

SELECT DISTINCT columna1, columna2, ...
FROM tabla;

Cuando añades DISTINCT a la consulta, la base de datos se asegura de que cada fila en el resultado sea única.

Ejemplos de uso de DISTINCT

Vamos a empezar con ejemplos clásicos para pillar cómo funciona DISTINCT.

Ejemplo 1: Valores únicos de una sola columna

Supón que tenemos una tabla students con datos de estudiantes:

-- Tabla students

id first_name last_name city
1 Maria Chi Seattle
2 Alex Lin Toronto
3 Anna Song Seattle
4 Nat Cole Chicago
5 Maria Chi Seattle

Queremos saber de qué ciudades vienen los estudiantes. Escribimos la consulta

SELECT city
FROM students;

y obtenemos el resultado:

city
Seattle
Toronto
Seattle
Chicago
Seattle

No es exactamente lo que queríamos :(

Para quitar los duplicados hay que usar DISTINCT:

SELECT DISTINCT city
FROM students;

Resultado:

city
Seattle
Toronto
Chicago

Sin DISTINCT veríamos "Seattle" tres veces, pero solo queremos una vez cada ciudad.

Ejemplo 2: Valores únicos de varias columnas

Ahora imagina que queremos obtener combinaciones únicas de "nombre + apellido", porque puede haber estudiantes con el mismo nombre o apellido.

Tenemos la misma tabla students:

-- Tabla students

id first_name last_name city
1 Maria Chi Seattle
2 Alex Lin Toronto
3 Anna Song Seattle
4 Nat Cole Chicago
5 Maria Chi Seattle

Consulta:

SELECT DISTINCT first_name, last_name
FROM students;

Resultado:

first_name last_name
Maria Chi
Alex Lin
Anna Song
Nat Cole

Así, DISTINCT funciona como un filtro: tiene en cuenta todas las columnas que indiques y elimina repeticiones solo de las filas donde los valores de todas esas columnas coinciden.

Ejemplo 3: Combinaciones únicas y ordenación

Ahora combinamos DISTINCT con la ordenación ORDER BY para obtener valores únicos ordenados alfabéticamente por apellido.

Tenemos la tabla students:

-- Tabla students

id first_name last_name city
1 Maria Chi Seattle
2 Alex Lin Toronto
3 Anna Song Seattle
4 Nat Cole Chicago
5 Maria Chi Seattle

Consulta:

SELECT DISTINCT first_name, last_name
FROM students
ORDER BY last_name ASC;

Resultado:

first_name last_name
Maria Chi
Nat Cole
Alex Lin
Anna Song

Las filas duplicadas se han eliminado y los apellidos están ordenados alfabéticamente.

Ejemplo 4: Uso en agregaciones

¿Y si intentamos aplicar DISTINCT a una función, por ejemplo, COUNT?

SELECT COUNT(DISTINCT city) AS unique_city_count
FROM students;

Resultado:

unique_city_count
3

Esta consulta te devuelve el número de ciudades únicas. Guay, ¿no?

Características del funcionamiento de DISTINCT

Cuando usas DISTINCT es importante entender que funciona sobre todas las columnas que indiques. Si añades más columnas a la consulta, el resultado puede cambiar.

Ejemplo 5: ¿Por qué es tan importante entender el contexto?

Si añades más campos a la consulta, eso puede afectar a la unicidad de las filas.

SELECT DISTINCT first_name, city
FROM students;

Tabla students:

id first_name last_name city
1 Maria Chi Seattle
2 Alex Lin Austin
3 Anna Song Seattle
4 Otto Art Denver
5 Maria Chi Portland

Resultado:

first_name city
Maria Seattle
Alex Austin
Anna Seattle
Otto Denver
Maria Portland

Ahora cada combinación "nombre + ciudad" es única. Así que recuerda: la unicidad la determinan todas las columnas que pongas, no cada columna por separado.

Errores típicos al trabajar con DISTINCT

Uno de los errores más comunes al usar DISTINCT es no entender bien lo que hace la consulta. Por ejemplo, si pones demasiadas columnas, puedes obtener un resultado muy diferente al esperado, porque la unicidad se determina por todas las columnas.

Por ejemplo:

SELECT DISTINCT *
FROM students;

En este caso, cada fila se considerará única porque se tienen en cuenta todas las columnas.

Otro error es usar DISTINCT donde no hace falta. Si sabes que los datos ya son únicos (por ejemplo, una columna que es clave primaria), DISTINCT solo añadirá carga innecesaria a la base de datos.

2
Tarea
SQL SELF, nivel 6, lección 1
Bloqueada
Ciudades únicas de los clientes
Ciudades únicas de los clientes
2
Tarea
SQL SELF, nivel 6, lección 1
Bloqueada
Combinaciones únicas de nombre y apellido
Combinaciones únicas de nombre y apellido
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION