Volver a la lista de artículos Artículos
Lectura de 7 minutos

¿Cuál es la función de DISTINCT en SQL?

La palabra clave DISTINCT en SQL juega un papel importante en la eliminación de valores duplicados de sus resultados. Este artículo proporciona ejemplos que muestran exactamente cómo funciona DISTINCT.

Por defecto, las consultas SQL muestran todas las filas devueltas, incluyendo las duplicadas, en el conjunto de resultados. La palabra clave DISTINCT en la cláusula SELECT se utiliza para eliminar las filas duplicadas y mostrar una lista única de valores. En otras palabras, la palabra clave DISTINCT recupera valores únicos de una tabla.

La sintaxis básica de la palabra clave DISTINCT en SQL es:

SELECT DISTINCT
  column_1,
  column_2,
  …,
  column_n
FROM table_name

(Si la sintaxis anterior le resulta confusa, considere el curso LearnSQL.es's SQL para principiantes. Cubre los fundamentos de SQL, incluyendo la palabra clave DISTINCT ).

Tenga en cuenta que la palabra clave DISTINCT debe colocarse antes de las columnas que especifique. Puede especificar más de una columna para ser DISTINCT, lo que hará que SQL devuelva sólo combinaciones únicas de los valores de esas columnas. Si selecciona más de una columna, todas las columnas se combinan y sólo se tendrá en cuenta la unicidad de la fila. SQL DISTINCT busca una fila distinta, en lugar de una columna distinta.

Veamos la palabra clave DISTINCT en acción con un ejemplo práctico. Primero, sin embargo, debemos familiarizarnos con los datos con los que vamos a trabajar. Imaginemos que tenemos una tabla llamada employee_infoque contiene detalles sobre los empleados de nuestra empresa:

employee_idfirst_namelast_namedepartmentage
127374JoshuaReesSales26
293421KarenBowerSales45
244813LukePayneNULL42
463281MaxPaigeHuman Resources53
374241JuliaGloverHuman Resources29
568421RoseHarrisHuman Resources43
NULLNULLNULLNULLNULL
839211OliviaBakerSales32
293493KarenBowerSales45
463281MaxPaigeHuman Resources53
244813LukePayneNULL42
933821BernadetteParsonsSalesNULL

SQL DISTINCT en una sola columna

Veamos el efecto de la palabra clave DISTINCT cuando intentamos SELECT la columna employee_id. Primero, aquí está la consulta antes de aplicar la palabra clave DISTINCT:

SELECT employee_id
FROM employee_info

El resultado es el siguiente:

employee_id
127374
293421
244813
463281
374241
568421
NULL
839211
293493
463281
244813
933821

La ejecución de esta consulta devuelve la columna employee_id completa de nuestra tabla. Esta columna coincide con la tabla employee_info tabla exactamente. Al analizarla más detenidamente, podemos ver algunos valores duplicados: 244813 y 463281 aparecen dos veces cada uno.

Añadamos la palabra clave DISTINCT para tratar estos valores duplicados. Recuerde que añadimos la palabra clave DISTINCT antes de especificar las columnas:

SELECT DISTINCT employee_id 
FROM employee_info
employee_id
127374
293421
244813
463281
374241
568421
NULL
839211
293493
933821

Nuestro conjunto de datos resultante parece más corto; hay varias cosas que podemos aprender de esta respuesta.

SQL DISTINCT elimina los valores duplicados

Si contrastamos la tabla original con nuestro resultado, podemos ver que los duplicados fueron filtrados con éxito. El uso de la palabra clave DISTINCT es sólo un método para eliminar valores duplicados, como se muestra en este artículo sobre las diferentes formas de eliminar duplicados en SQL.

La tabla employee_info tabla contiene dos apariciones de los siguientes valores:

employee_id
244813
463281

Sin embargo, nuestro resultado ahora sólo muestra estos valores una vez. La palabra clave DISTINCT ha tenido el efecto deseado.

Preste atención a las columnas utilizadas

Cuando se ve por primera vez la tabla employee_info tabla, parece que estas filas están duplicadas.

employee_idfirst_namelast_namedepartmentage
293421KarenBowerSales45
293493KarenBowerSales45

Si se observa con detenimiento, se puede ver que el valor de employee_id es diferente. Como hemos aplicado la palabra clave DISTINCT a esta columna employee_id, se devuelven ambos valores.

La inclusión de valores NULL

Probablemente haya notado la presencia de valores NULL en el conjunto de datos devuelto. En SQL, NULL se considera un valor único, lo que significa que se devolverá cuando se utilice la palabra clave DISTINCT. Si desea eliminar los valores de NULL del resultado, puede escribir la siguiente consulta:

SELECT DISTINCT
  * 
FROM employee_info 
WHERE employee_id IS NOT NULL

SQL DISTINCT con una subconsulta

También puede utilizar la palabra clave DISTINCT como parte de una subconsulta. Sin embargo, cabe mencionar que una subconsulta IN, ANY, o EXISTS se evalúa como verdadera si hay al menos una fila que hace que la subconsulta se evalúe como verdadera. Esto hace innecesario el uso de DISTINCT con una subconsulta IN, ANY, o EXISTS.

SQL DISTINCT con múltiples columnas

Las columnas que se especifican como DISTINCT juegan un papel clave en los datos que se devuelven. Observe la siguiente consulta:

SELECT DISTINCT
  employee_id,
  first_name,
  last_name 
FROM employee_info

Estamos buscando combinaciones únicas de estas tres columnas. Al ejecutar esta consulta se obtiene el siguiente resultado:

employee_idfirst_namelast_name
127374JoshuaRees
293421KarenBower
244813LukePayne
463281MaxPaige
374241JuliaGlover
568421RoseHarris
NULLNULLNULL
839211OliviaBaker
293493KarenBower
933821BernadetteParsons

Al explorar este conjunto de resultados, es posible que espere ver nombres completamente únicos junto con su employee_id. Por ejemplo, observe estos datos:

employee_idfirst_namelast_name
293421KarenBower
293493KarenBower

El valor employee_id es único para ambas filas, lo que significa que estas filas también se consideran únicas. Si cambiamos la consulta por la siguiente:

SELECT DISTINCT
  first_name,
  last_name 
FROM employee_info

... ya no se considera employee_id; ahora buscamos combinaciones únicas de nombres. Así, sólo se muestra una fila para "Karen Bower":

first_namelast_name
JoshuaRees
KarenBower
LukePayne
MaxPaige
JuliaGlover
RoseHarris
NULLNULL
OliviaBaker
BernadetteParsons

Si tiene problemas para obtener los resultados deseados al utilizar la palabra clave DISTINCT, preste especial atención a las columnas que ha incluido. Si este ejemplo específico todavía le causa confusión, consulte este artículo sobre cómo contar valores distintos en SQL.

SQL DISTINCT con funciones agregadas

La palabra clave DISTINCT puede ser utilizada junto con funciones de agregación. Las funciones agregadas más comunes son:

  • MIN() - Devuelve el valor más pequeño (mínimo).
  • MAX() - Devuelve el valor más grande (máximo).
  • SUM() - Devuelve la suma de los valores especificados.
  • AVG() - Devuelve la media de los valores especificados (por ejemplo, en una columna).
  • COUNT() - Devuelve el número de elementos (por ejemplo, en una columna).

Cuando se utiliza DISTINCT con SUM(), AVG(), y COUNT(), se eliminan los valores duplicados antes de calcular la suma, la media o el recuento. Aunque puede utilizar la palabra clave DISTINCT con MIN() y MAX(), no tiene sentido hacerlo; no tendrá ningún impacto en los resultados.

Apliquemos esta información a nuestro ejemplo anterior sobre la tabla employee_info tabla. Si quisiéramos contar el número de empleados que trabajan actualmente en nuestra empresa teniendo cuidado de eliminar las entradas duplicadas, escribiríamos la siguiente consulta:

SELECT COUNT(DISTINCT employee_id)
FROM employee_info

El resultado de esta consulta es:

COUNT(DISTINCT employee_id)
9

Este sería el ejemplo más sencillo de cómo se puede utilizar la palabra clave DISTINCT junto con las funciones de agregación. La ejecución de esta consulta sin la palabra clave DISTINCT incluiría valores duplicados en el recuento:

SELECT COUNT(employee_id) 
FROM employee_info

El resultado de esta consulta es:

COUNT(employee_id)
11

Si cree que su tabla puede contener registros duplicados, el uso de DISTINCT es una forma excelente de garantizar que sus informes sean precisos y no se vean afectados por los valores duplicados. Si este caso de uso no le resulta claro, le recomiendo que lea este artículo sobre el recuento de valores distintos en SQL. Hay muchos otros casos de uso para COUNT(); para ver otros ejemplos útiles, consulte este artículo que explica las diferencias entre las aplicaciones comunes de la función COUNT().

DISTINCT con funciones agregadas y GROUP BY

Utilicemos una función agregada con la palabra clave DISTINCT para ayudarnos a resolver un problema común. Queremos encontrar el número de entradas potenciales duplicadas de employee_id para cada par de nombres en nuestra tabla. Queremos aislar el caso en el que el nombre del empleado es exactamente el mismo, pero con un employee_id diferente. Esta es la consulta:

SELECT
  first_name,
  last_name,
  COUNT(DISTINCT employee_id) 
FROM employee_info 
GROUP BY first_name, last_name

Y el resultado:

employee_idfirst_nameCOUNT (DISTINCT employee_id)
NULLNULL0
BernadetteParsons1
JoshuaRees1
JuliaGlover1
KarenBower2
LukePayne1
MaxPaige1
OliviaBaker1
RoseHarris1

Podemos ver en estos resultados que tenemos dos entradas diferentes para el employee_id de Karen Bower. Este es un dato excelente. Si no hay dos individuos diferentes llamados Karen Bower trabajando en nuestra empresa, sabemos que esta información fue introducida por error y puede ser considerada como un duplicado que debe ser eliminado.

¡Aprender sobre DISTINCT en SQL es sólo el comienzo!

La capacidad de aislar y excluir los datos duplicados de los resultados de la consulta es una habilidad importante para todos los usuarios de SQL. La palabra clave DISTINCT juega un papel importante en su habilidad para hacer esto efectivamente. Si te ha gustado este artículo y quieres seguir aprendiendo sobre SQL, considera nuestra pista de aprendizaje Principios básicos de SQL . Le enseñará las sentencias SQL básicas como WHERE, GROUP BY, ORDER BY, y HAVING. También aprenderá cómo JOIN tablas y añadir, modificar o eliminar datos de una base de datos.