UNIQUE en SQL: qué es, cómo funciona y ejemplos prácticos

La restricción UNIQUE en SQL asegura que los valores de una columna (o de un conjunto de columnas) sean únicos en toda la tabla.
En otras palabras, evita que existan filas duplicadas para ese campo o combinación de campos.

👉 Una columna UNIQUE puede aceptar valores NULL, pero dependiendo del motor de base de datos puede aceptar uno o varios NULL.

Sintaxis básica de UNIQUE

Al crear una tabla, la restricción se define con CREATE TABLE.

CREATE TABLE nombre_tabla (
  columna1 tipo_dato UNIQUE,
  columna2 tipo_dato,
  ...
);

También se puede aplicar a varias columnas (restricción de tabla):

CREATE TABLE nombre_tabla (
  columna1 tipo_dato,
  columna2 tipo_dato,
  CONSTRAINT nombre_unico UNIQUE (columna1, columna2)
);

Ejemplo básico con UNIQUE en una sola columna

CREATE TABLE usuarios (
  id INT PRIMARY KEY,
  email VARCHAR(100) UNIQUE,
  nombre VARCHAR(100)
);

👉 Aquí, ningún usuario puede tener el mismo email que otro.

Intentar insertar duplicados:

INSERT INTO usuarios (id, email, nombre)
VALUES (1, 'ana@mail.com', 'Ana');

INSERT INTO usuarios (id, email, nombre)
VALUES (2, 'ana@mail.com', 'Ana duplicada'); -- ❌ Error

Ejemplo de UNIQUE en múltiples columnas

CREATE TABLE inscripciones (
  estudiante_id INT,
  curso_id INT,
  CONSTRAINT inscripcion_unica UNIQUE (estudiante_id, curso_id)
);

👉 Permite que un estudiante se inscriba en muchos cursos, pero no en el mismo curso dos veces.

Agregar UNIQUE a una tabla existente con ALTER TABLE

También se puede aplicar después con ALTER TABLE.

ALTER TABLE usuarios
ADD CONSTRAINT unico_usuario UNIQUE (email);

👉 Agrega la restricción después de creada la tabla.

Eliminar una restricción UNIQUE

ALTER TABLE usuarios
DROP CONSTRAINT unico_usuario;

👉 El nombre de la restricción (unico_usuario) depende del motor de base de datos o de cómo se definió.

Diferencias entre UNIQUE y PRIMARY KEY

CaracterísticaUNIQUEPRIMARY KEY
Unicidad
Nulos permitidosSí (varía por motor)❌ No
Número por tablaSe pueden definir variasSolo una por tabla
Propósito principalEvitar duplicadosIdentificar filas únicas

Ejemplo:

CREATE TABLE clientes (
  id INT PRIMARY KEY,
  email VARCHAR(100) UNIQUE,
  telefono VARCHAR(20) UNIQUE
);

👉 id es la clave primaria, mientras que email y telefono tienen restricciones UNIQUE adicionales.

Ejemplo práctico: inventario de productos

CREATE TABLE productos (
  id INT PRIMARY KEY,
  codigo VARCHAR(50) UNIQUE,
  nombre VARCHAR(100),
  precio DECIMAL(10,2)
);

👉 Garantiza que ningún producto tenga el mismo código.

Ejemplo práctico: reservas de vuelos

CREATE TABLE reservas (
  id INT PRIMARY KEY,
  vuelo_id INT,
  asiento VARCHAR(5),
  pasajero_id INT,
  CONSTRAINT asiento_unico UNIQUE (vuelo_id, asiento)
);

👉 Evita que dos pasajeros tengan el mismo asiento en el mismo vuelo.

UNIQUE en distintos motores de base de datos

  • MySQL / MariaDB → permite múltiples índices UNIQUE en la misma tabla. Acepta múltiples NULL.
  • PostgreSQL → también permite múltiples NULL en columnas UNIQUE.
  • SQL Server → solo permite un NULL en columnas con UNIQUE.
  • Oracle → permite múltiples NULL en columnas UNIQUE.
  • SQLite → permite múltiples NULL, aunque considera NULL como no igual a otro NULL.

Errores comunes con UNIQUE

  1. Insertar duplicados
    👉 Causa error inmediato en la base de datos.
  2. Olvidar dar nombre a la restricción
    👉 Puede ser difícil de eliminar después.
  3. Asumir que UNIQUE y PRIMARY KEY son lo mismo
    👉 No lo son: PRIMARY KEY es más restrictivo.
  4. Confiar solo en la aplicación
    👉 Siempre conviene definir UNIQUE en la base, no solo en el código.
  5. Desconocer el manejo de NULL
    👉 Algunos motores permiten múltiples NULL, otros solo uno.

Buenas prácticas con UNIQUE

  • Usar UNIQUE en columnas que deben tener valores irrepetibles (emails, DNIs, códigos).
  • Definir nombres descriptivos a las restricciones (CONSTRAINT email_unico UNIQUE(email)).
  • Documentar reglas de negocio que justifiquen la restricción.
  • Probar inserciones con NULL para entender el comportamiento del motor de base de datos.
  • No confundir con índices: un índice acelera consultas, UNIQUE asegura integridad.

Casos de uso de UNIQUE

  1. Usuarios en un sistema → asegurar que los emails sean únicos.
  2. Inventario → garantizar códigos de producto irrepetibles.
  3. Documentos oficiales → asegurar que el DNI o pasaporte no se repita.
  4. Reservas → evitar asientos duplicados en vuelos o eventos.
  5. Facturación → asegurar que un número de factura sea único.

Preguntas frecuentes (FAQ)

1. ¿Puedo tener varias restricciones UNIQUE en una tabla?
Sí, tantas como quieras.

2. ¿UNIQUE acepta valores NULL?
Sí, pero depende del motor de base de datos.

3. ¿Cuál es la diferencia entre UNIQUE y un índice normal?
El índice acelera búsquedas; UNIQUE asegura integridad evitando duplicados.

4. ¿Se puede aplicar UNIQUE a varias columnas a la vez?
Sí, creando una restricción de tabla con más de una columna.

5. ¿Puedo usar UNIQUE y PRIMARY KEY en la misma columna?
No es necesario, ya que PRIMARY KEY ya implica unicidad.

Conclusión

La restricción UNIQUE en SQL es fundamental para:

  • Evitar duplicados en columnas o combinaciones de columnas.
  • Asegurar integridad en datos críticos como emails, DNIs, códigos o asientos.
  • Complementar claves primarias en el diseño de bases de datos.

Dominar UNIQUE permite construir sistemas confiables y coherentes, evitando inconsistencias y errores en los registros.

Estudia unicidad de columnas en Claves y restricciones y revisa el Glosario SQL completo.

Scroll al inicio