0Pricing
SQL Academy · Lección

DISTINCT en varias columnas

Unicidad entre combinaciones

DISTINCT en varias columnas es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.

¿Por qué varias columnas?

Ya sabe que SELECT DISTINCT elimina las filas duplicadas. Pero ¿qué significa «duplicado» cuando la consulta devuelve varias columnas?

Una fila solo se considera duplicada cuando todas las columnas seleccionadas tienen el mismo valor que otra fila. Si una sola columna es diferente, ambas filas se conservan.

Tabla de ejemplo: Orders

Vamos a crear una tabla pequeña de orders para experimentar. En ella se almacena qué cliente compró de qué categoría y en qué país.

CREATE TABLE orders (
  id         INTEGER,
  customer   VARCHAR(50),
  category   VARCHAR(50),
  country    VARCHAR(50)
);

INSERT INTO orders VALUES
  (1, 'Alice', 'Electronics', 'US'),
  (2, 'Alice', 'Books',       'US'),
  (3, 'Bob',   'Electronics', 'UK'),
  (4, 'Alice', 'Electronics', 'US'),
  (5, 'Bob',   'Electronics', 'UK'),
  (6, 'Carol', 'Clothing',    'CA');

DISTINCT con una columna

Un breve recordatorio: usar DISTINCT en una sola columna devuelve únicamente cada valor único de esa columna.

Aquí obtenemos todos los nombres de cliente únicos: solo tres filas, aunque hay seis pedidos.

SELECT DISTINCT customer
FROM orders;

DISTINCT con dos columnas

Ahora añada una segunda columna. La palabra clave DISTINCT sigue apareciendo una sola vez, justo después de SELECT. La base de datos trata cada par único (customer, category) como una fila.

Alice aparece dos veces: una para Electronics y otra para Books, porque son dos combinaciones diferentes.

SELECT DISTINCT customer, category
FROM orders;

Cómo se comprueba la unicidad

La base de datos compara instantáneas completas de las filas. Para que DISTINCT elimine una fila, todas las columnas de la lista de SELECT deben coincidir exactamente con una fila ya vista.

En nuestra tabla de orders, las filas 3 y 5 son ambas (Bob, Electronics, UK): coinciden perfectamente en las tres columnas, por lo que una de ellas se elimina.

SELECT DISTINCT customer, category, country
FROM orders;
-- Row (Bob, Electronics, UK) appears only once
-- even though it occurs on rows 3 and 5

Una coincidencia parcial no se elimina

Alice tiene dos filas con category = Electronics, pero ambas tienen country = US. Al seleccionar las tres columnas, esas dos filas originales son idénticas, por lo que solo una permanece.

Si cambia la selección, también cambia la comprobación de unicidad.

-- Select only customer + country
-- (Alice, US) appears twice in the table but DISTINCT keeps it once
SELECT DISTINCT customer, country
FROM orders;

-- Now add category back — uniqueness recalculated
SELECT DISTINCT customer, category, country
FROM orders;

Caso de uso real: combinaciones únicas

Un patrón común consiste en encontrar cada combinación única de dos atributos; por ejemplo, qué categorías de productos se venden en qué países, sin importar cuántas veces se haya realizado cada venta.

SELECT DISTINCT category, country
FROM orders
ORDER BY category, country;

Combinar DISTINCT con WHERE

Puede filtrar primero las filas con WHERE y, después, DISTINCT elimina los duplicados del resultado filtrado. Las dos cláusulas funcionan de forma independiente: WHERE reduce los datos y DISTINCT elimina los duplicados.

SELECT DISTINCT customer, category
FROM orders
WHERE country = 'US';

DISTINCT frente a GROUP BY

Otra forma equivalente de obtener combinaciones únicas es GROUP BY. Ambos enfoques producen el mismo resultado para una deduplicación simple. La diferencia importa cuando necesita agregaciones: GROUP BY permite añadir COUNT(*), SUM(), etc., mientras que DISTINCT no.

-- Using DISTINCT
SELECT DISTINCT customer, category
FROM orders;

-- Equivalent using GROUP BY
SELECT customer, category
FROM orders
GROUP BY customer, category;

Contar combinaciones únicas

Envolver un DISTINCT de varias columnas dentro de una subconsulta permite contar cuántas combinaciones únicas existen. Es una forma práctica de medir la diversidad de sus datos.

SELECT COUNT(*) AS unique_customer_category_pairs
FROM (
  SELECT DISTINCT customer, category
  FROM orders
) AS deduped;

Error común: DISTINCT se aplica a todas las columnas

Un error frecuente es creer que DISTINCT solo se aplica a la primera columna indicada. No es así. DISTINCT siempre tiene en cuenta la fila completa formada por todas las columnas seleccionadas.

No puede usar DISTINCT solo en algunas columnas y conservar los duplicados en otras; para eso necesita funciones de ventana como ROW_NUMBER().

-- This does NOT give distinct customers with any category
-- It gives distinct (customer, category) pairs
SELECT DISTINCT customer, category
FROM orders;

-- If you want one row per customer (any category), use:
SELECT customer, MIN(category) AS sample_category
FROM orders
GROUP BY customer;

Comprobación rápida

Compruebe su comprensión de DISTINCT en varias columnas.

Resumen de la lección

¡Excelente trabajo! Esto es lo que ha aprendido sobre el uso de DISTINCT en varias columnas:

  • DISTINCT se aplica a la fila completa: todas las columnas seleccionadas se comprueban conjuntamente.
  • Una fila solo se elimina cuando todas sus columnas coinciden exactamente con las de una fila ya encontrada.
  • Añadir o quitar columnas de la lista SELECT cambia qué filas se consideran duplicadas.
  • Puede combinar DISTINCT con WHERE y ORDER BY sin restricciones.
  • GROUP BY es una alternativa equivalente y es necesario cuando también necesita agregaciones.

Dominar DISTINCT en varias columnas le permite explorar de forma eficiente las combinaciones únicas de cualquier conjunto de datos.

Preguntas frecuentes

¿La lección «DISTINCT en varias columnas» es gratis?

Sí — el texto completo de «DISTINCT en varias columnas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.

¿Qué aprenderé en «DISTINCT en varias columnas»?

Unicidad entre combinaciones Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar SQL Academy?

No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «DISTINCT en varias columnas»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de SQL Academy?

Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Conceptos básicos de SELECT DISTINCT
  2. DISTINCT en varias columnas
  3. DISTINCT ON de PostgreSQL
  4. Recuento de valores únicos
← Volver a SQL Academy