DISTINCT en SQL: qué es, cómo se usa y ejemplos prácticos

En SQL, la palabra clave DISTINCT se utiliza para eliminar duplicados en los resultados de una consulta SELECT. Es decir, devuelve únicamente los valores únicos de una o varias columnas.

Por ejemplo, si una tabla contiene registros repetidos de un país o categoría, DISTINCT permite obtener una lista limpia sin repeticiones.

Es una herramienta muy valiosa cuando necesitamos contar valores únicos, generar reportes resumidos o preparar datos para análisis más avanzados.

Sintaxis de DISTINCT

La forma básica es:

SELECT DISTINCT columna1, columna2, ...
FROM tabla
WHERE condición;
  • columna1, columna2…: las columnas que se van a evaluar para la unicidad.
  • tabla: la tabla de origen.
  • condición: opcional, permite filtrar resultados antes de aplicar DISTINCT (WHERE).

👉 Si se selecciona más de una columna, DISTINCT devuelve combinaciones únicas de esos campos.

Ejemplos prácticos de DISTINCT

1. Eliminar duplicados en una sola columna

SELECT DISTINCT pais
FROM clientes;

👉 Devuelve la lista de países sin repeticiones.

2. Eliminar duplicados en múltiples columnas

SELECT DISTINCT ciudad, pais
FROM clientes;

👉 Devuelve combinaciones únicas de ciudad y país. Si hay dos ciudades con el mismo nombre en países diferentes, se mostrarán ambas.

3. Usar DISTINCT con COUNT()

SELECT COUNT(DISTINCT pais) AS total_paises
FROM clientes;

👉 Devuelve la cantidad de países distintos en los que hay clientes. Ejemplo clásico en conjunto con COUNT().

4. DISTINCT con condiciones

SELECT DISTINCT categoria
FROM productos
WHERE precio > 100;

👉 Devuelve las categorías de productos con precio mayor a 100, sin repetir valores.

5. DISTINCT en combinaciones más complejas

SELECT DISTINCT departamento, puesto
FROM empleados;

👉 Muestra solo los pares únicos de departamento y puesto.

6. DISTINCT dentro de subconsultas

SELECT *
FROM pedidos
WHERE cliente_id IN (
  SELECT DISTINCT cliente_id FROM pedidos WHERE fecha >= '2025-01-01'
);

👉 Devuelve pedidos de clientes únicos que hayan comprado desde 2025 en adelante. Ejemplo combinado con subconsultas.

Diferencia entre DISTINCT y GROUP BY

Aunque DISTINCT y GROUP BY pueden dar resultados similares, no son lo mismo:

  • DISTINCT: elimina duplicados y devuelve filas únicas.
  • GROUP BY: agrupa filas y normalmente se usa con funciones de agregación (COUNT, SUM, AVG).

Ejemplo comparativo:

-- Con DISTINCT
SELECT DISTINCT pais FROM clientes;

-- Con GROUP BY
SELECT pais FROM clientes GROUP BY pais;

👉 Ambos devuelven la lista de países únicos.
Pero con GROUP BY podemos hacer cálculos adicionales:

SELECT pais, COUNT(*) AS clientes_por_pais
FROM clientes
GROUP BY pais;

Usos comunes de DISTINCT

  1. Listas únicas: obtener valores únicos de categorías, países, ciudades, etc.
  2. Contar valores distintos: clientes en distintos países, productos en diferentes categorías.
  3. Eliminar duplicados en reportes: cuando una tabla tiene registros redundantes.
  4. Analizar combinaciones de columnas: ver relaciones únicas entre dos o más campos.

Errores comunes con DISTINCT

  1. Pensar que DISTINCT modifica la tabla:
    👉 No cambia los datos almacenados, solo el resultado de la consulta.
  2. Usar DISTINCT en todas las consultas:
    👉 Puede afectar la performance innecesariamente. Conviene usarlo solo cuando haya duplicados reales.
  3. Confundir COUNT(*) con COUNT(DISTINCT):
    • COUNT(*) cuenta todas las filas.
    • COUNT(DISTINCT columna) cuenta solo valores únicos.
  4. No entender las combinaciones de varias columnas:
    👉 DISTINCT ciudad, pais devuelve pares únicos, no valores individuales.
  5. Problemas de performance en tablas grandes:
    👉 DISTINCT puede ser costoso en datasets de millones de filas porque necesita ordenar o agrupar internamente.

Buenas prácticas con DISTINCT

  • Usarlo solo cuando sea necesario (duplicados reales).
  • Si lo combinás con COUNT, asegurate de diferenciar COUNT(*) vs COUNT(DISTINCT col).
  • Para reportes con cálculos, preferir GROUP BY si además querés aplicar agregaciones.
  • En tablas grandes, verificar si la columna debería ser UNIQUE en el diseño del esquema (puede que no necesites DISTINCT).
  • Combinar con índices adecuados para mejorar la performance.

Ejemplo avanzado: clientes únicos con pedidos recientes

SELECT DISTINCT c.id, c.nombre
FROM clientes c
JOIN pedidos p ON c.id = p.cliente_id
WHERE p.fecha >= '2025-01-01';

👉 Devuelve la lista de clientes únicos que realizaron al menos un pedido en 2025.

Preguntas frecuentes (FAQ)

1. ¿DISTINCT elimina duplicados de toda la tabla?
No. Solo de las columnas seleccionadas en la consulta.

2. ¿Puedo usar DISTINCT en varias columnas?
Sí, y devuelve combinaciones únicas de esas columnas.

3. ¿Qué diferencia hay entre DISTINCT y UNIQUE?

  • DISTINCT se usa en consultas.
  • UNIQUE es una restricción en la definición de la tabla.

4. ¿DISTINCT afecta la performance?
En tablas grandes puede ser costoso porque requiere ordenar o agrupar internamente.

5. ¿Puedo usar DISTINCT con funciones de agregación?
Sí, especialmente con COUNT(DISTINCT columna) para contar valores únicos.

Conclusión

El operador DISTINCT en SQL es una herramienta fundamental para eliminar duplicados en consultas y obtener listas limpias de valores únicos. Es muy útil en análisis de datos, reportes y validación de integridad.

Sin embargo, debe usarse con criterio: no reemplaza a GROUP BY, no modifica la base de datos y puede impactar en la performance en tablas enormes.

Dominar DISTINCT te permitirá escribir consultas más claras y obtener resultados más confiables.

Profundiza en resultados sin duplicados en SELECT y FROM y consulta el Glosario SQL completo.

Scroll al inicio