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

¿Cuál es la diferencia entre UNIQUE y DISTINCT en SQL?

En nuestro día a día utilizamos indistintamente las palabras único y distinto. Sin embargo, estas palabras desempeñan papeles muy diferentes en SQL. Averigüemos en qué se diferencian y cómo podemos utilizarlas en SQL.

A pesar de que las palabras único y distinto son sinónimos, cubren cosas muy diferentes en SQL. La palabra clave UNIQUE en SQL juega el papel de una restricción de la base de datos; asegura que no hay valores duplicados almacenados en una columna particular o un conjunto de columnas. Por otro lado, la palabra clave DISTINCT se utiliza en la sentencia SELECT para obtener filas distintas de una tabla.

El mejor lugar para aprender sobre SQL y bases de datos es LearnSQL.es. Es una plataforma en línea diseñada para ayudarte a dominar todos los temas relacionados con las bases de datos. Ofrece más de 30 cursos de SQL, incluyendo un Curso completo de SQL con la ruta completa de aprendizaje de SQL interactivo o Creación de la estructura de la base de datos que le enseñará sobre las restricciones de la base de datos como UNIQUE.

Veamos con más detalle las palabras clave UNIQUE y DISTINCT en SQL.

La palabra clave DISTINCT en SQL

La palabra clave DISTINCT en SQL se utiliza con la sentencia SELECT. Usando SELECT inmediatamente seguido de la palabra clave DISTINCT, todas las filas duplicadas son eliminadas del conjunto de resultados.

Veamos un ejemplo de DISTINCT en acción.

Nos dan la tabla Cars que contiene la información de la marca y el modelo de algunos coches:

IdBrandModelProductionYear
AQ16AudiQ72011
FK19FordKuga2019
JC07JeepCherokee2012
JW15JeepWrangler2015
TS14TeslaModel S2014
TY20TeslaModel Y2020

Ejecutemos una simple sentencia SELECT para obtener todas las marcas de coches producidas después de 2011:

SELECT Brand 
FROM Cars 
WHERE ProductionYear > 2011;

El resultado de la consulta anterior es el siguiente.

Brand
Ford
Jeep
Jeep
Tesla
Tesla

Como puede ver, tenemos valores duplicados para Jeep y Tesla. ¿Qué pasa si queremos un único registro para cada valor? Utilizamos la palabra clave DISTINCT:

SELECT DISTINCT Brand 
FROM Cars 
WHERE ProductionYear > 2011;

Y el resultado es...

Brand
Ford
Jeep
Tesla

Ahora ves lo fácil y cómodo que es utilizar la palabra clave DISTINCT.

Para obtener una visión más profunda de la palabra clave DISTINCT en SQL, consulte nuestro artículo sobre ¿Cuál es el papel de DISTINCT en SQL?

La palabra clave UNIQUE en SQL

La palabra clave UNIQUE en SQL marca una de sus restricciones de base de datos. Al utilizar la restricción UNIQUE en una columna o un conjunto de columnas, puede evitar que se almacenen valores duplicados en esta columna o conjunto (es decir, la combinación de valores de las columnas debe ser única, aunque cada valor pueda aparecer varias veces en la misma columna).

Veamos la restricción UNIQUE en acción. Vamos a crear una tabla Person tabla que almacena el nombre, el número de la seguridad social y la nacionalidad de una persona.

CREATE TABLE Person (
	RowId INTEGER PRIMARY KEY,
	FirstName varchar(50),
	LastName varchar(50),
	SSN varchar(20) UNIQUE,
	Nationality varchar(30)
);

En este caso, la columna SSN debe almacenar sólo valores no duplicados; por lo tanto, hay una palabra clave UNIQUE en la definición de esta columna, que le impone la restricción UNIQUE.

Para más práctica con la creación de tablas y el diseño de bases de datos, consulte nuestro tema sobre la Creación de la estructura de la base de datos. Incluye los fundamentos de la creación de tablas, los tipos de datos SQL, las restricciones y mucho más. Y para una mayor comprensión del tema, lee este artículo.

Ahora, vamos a insertar algunos valores en la tabla Person tabla.

INSERT INTO Person VALUES (1, 'John', 'Black', '321456987123', 'American');
INSERT INTO Person VALUES (2, 'Isabella', 'Sanchez', '987456345123', 'Spanish');
INSERT INTO Person VALUES (3, 'Klaus', 'Schmidt', '987456345123', 'German');

Obtenemos un error en la tercera sentencia INSERT. ¿Por qué? Porque se ha definido una restricción UNIQUE en la columna SSN; por lo tanto, el mismo valor no puede aparecer dos veces en la columna SSN. Tanto Isabella como Klaus tienen el mismo valor SSN, por lo que recibimos un mensaje de error. No hemos respetado las reglas establecidas por la restricción UNIQUE.

Si cambiamos la última sentencia INSERT por...

INSERT INTO Person VALUES (3, 'Klaus', 'Schmidt', '876456345123', 'German');

... es aceptada en la tabla. Después de ejecutar las tres sentencias INSERT, incluida la tercera sentencia corregida, la Person tabla tiene el siguiente aspecto:

RowIdFirstNameLastNameSSNNationality
1JohnBlack321456987123American
2IsabellaSanchez987456345123Spanish
3KlausSchmidt876456345123German

La restricción UNIQUE impide cualquier INSERTs o UPDATEs a una tabla que resulte en valores duplicados en la columna o conjunto de columnas que implementa la restricción.

Por lo tanto, la tabla siguiente viola la restricción UNIQUE establecida en la columna SSN...

RowIdFirstNameLastNameSSNNationality
1JohnBlack321456987123American
2IsabellaSanchez987456345123Spanish
3KlausSchmidt987456345123German

...y esta tabla obedece a la restricción UNIQUE establecida en la columna SSN.

RowIdFirstNameLastNameSSNNationality
1JohnBlack321456987123American
2IsabellaSanchez987456345123Spanish
3KlausSchmidt876456345123German

Puede definir la restricción UNIQUE durante la creación de la tabla, como se ha mostrado aquí, o después de crear la tabla. La restricción UNIQUE también puede ser modificada o eliminada posteriormente. Para aprender a hacer todo esto, consulta el artículo ¿Qué es una restricción única en SQL? También ofrecemos un curso interactivo sobre Restricciones SQL para ayudarle a comprender las diferentes restricciones que SQL pone a su disposición.

Poniendo todo junto: UNIQUE vs. DISTINCT en SQL

Hemos definido las palabras clave UNIQUE y DISTINCT. Pero, ¿cuáles son las diferencias reales entre ellas?

La palabra clave UNIQUE marca una restricción de la base de datos y se define durante la creación de la tabla o posteriormente en una columna específica o un conjunto de columnas. La palabra clave DISTINCT se utiliza cuando se obtiene el conjunto de resultados de la base de datos. Sigue directamente a la palabra claveSELECT cuando queremos asegurarnos de que todas las filas del conjunto de resultados contienen valores distintos o un conjunto de valores distintos.

Sabemos que siempre es bueno tener tanta práctica como sea posible, así que hemos preparado un Ejercicios prácticos de SQL que te ayudará a aprender y practicar todas las diferentes características que ofrece SQL. Para motivarte, echa un vistazo a nuestro artículo sobre el Ejercicios prácticos de SQL.

Buena suerte.