0Pricing
SQL Academy · Lección

Conceptos básicos de SELECT DISTINCT

Devuelva únicamente filas únicas

Conceptos básicos de SELECT DISTINCT es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 1 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é aparecen duplicados

Las tablas suelen contener valores repetidos. Una tabla customers podría incluir la misma city en miles de filas. Cuando solo le interesa el conjunto de valores distintos, un SELECT normal devuelve todas las filas, incluidos los repetidos.

SELECT DISTINCT agrupa las filas idénticas en una sola. En esta lección aprenderá los conceptos básicos para devolver únicamente resultados únicos.

SELECT city FROM customers;
-- Returns one row per customer, with many repeated cities

La palabra clave DISTINCT

DISTINCT va justo después de SELECT. Elimina las filas duplicadas del conjunto de resultados y conserva una sola copia de cada combinación única de las columnas seleccionadas.

SELECT DISTINCT city
FROM customers;
-- One row per unique city

DISTINCT se aplica a toda la fila

Un error común es pensar que DISTINCT se aplica a una sola columna. En realidad, se aplica a la fila seleccionada completa. Todas las columnas que indique participan en la decisión de si dos filas son duplicadas.

A continuación, las filas se deduplican únicamente según el valor de city, porque esa es la única columna seleccionada.

SELECT DISTINCT country
FROM customers;
-- Unique countries across all customers

Datos de ejemplo

Imagine una tabla pequeña de orders. Observe los valores repetidos de status y country. Usaremos esta estructura durante toda la lección.

  • id=1, status='paid', country='US'
  • id=2, status='paid', country='US'
  • id=3, status='shipped', country='DE'
  • id=4, status='paid', country='DE'
CREATE TABLE orders (
  id         int PRIMARY KEY,
  status     text,
  country    text,
  amount     numeric(10,2)
);

DISTINCT con una sola columna

Seleccionar DISTINCT status de los datos de ejemplo devuelve los valores únicos de status: paid y shipped. Las cuatro filas se reducen a dos.

SELECT DISTINCT status
FROM orders;
-- paid
-- shipped

NULL se trata como un solo valor

Aunque normalmente NULL no es igual a nada (ni siquiera a sí mismo), DISTINCT trata todos los valores NULL como un único grupo. Si una columna tiene muchas filas con NULL, obtendrá exactamente un NULL en el resultado distinto.

SELECT DISTINCT shipped_at
FROM orders;
-- All NULL shipped_at rows collapse into a single NULL row

DISTINCT con ORDER BY

Normalmente querrá ordenar los valores únicos. DISTINCT se ejecuta primero para crear el conjunto de valores únicos y después ORDER BY lo ordena. Cualquier columna de ORDER BY también debe aparecer en la lista de SELECT cuando se usa DISTINCT.

SELECT DISTINCT country
FROM orders
ORDER BY country;
-- DE
-- US

DISTINCT frente a GROUP BY

SELECT DISTINCT col y SELECT col GROUP BY col producen las mismas filas únicas. Use DISTINCT cuando solo quiera valores únicos; recurra a GROUP BY cuando también necesite agregaciones como COUNT para cada grupo.

-- These two return the same set of countries:
SELECT DISTINCT country FROM orders;

SELECT country FROM orders
GROUP BY country;

DISTINCT tiene un coste

Eliminar duplicados no es gratis. La base de datos debe ordenar o aplicar hashing a todas las filas candidatas para encontrar las únicas. En tablas grandes, esto añade trabajo de CPU y memoria, así que solicite DISTINCT únicamente cuando realmente necesite valores únicos.

-- Avoid blind DISTINCT on every query.
-- If the column is already unique (e.g. a PRIMARY KEY),
-- DISTINCT does nothing useful but still costs work:
SELECT DISTINCT id FROM orders;  -- id is already unique

DISTINCT en expresiones

Puede aplicar DISTINCT a una expresión calculada, no solo a una columna sin modificar. La base de datos evalúa la expresión para cada fila y después deduplica los resultados.

SELECT DISTINCT upper(country) AS country_code
FROM orders
ORDER BY country_code;
-- DE
-- US

Crear una lista de opciones

Un uso práctico de DISTINCT es rellenar una lista desplegable o de filtros en una aplicación: obtener los estados únicos para mostrar al usuario todas las opciones posibles que existen actualmente en los datos.

SELECT DISTINCT status
FROM orders
ORDER BY status;
-- paid
-- shipped

Comprobación rápida

¿Dónde debe colocarse la palabra clave DISTINCT y qué elementos deduplica?

Resumen

Ha aprendido los conceptos básicos de SELECT DISTINCT:

  • Elimina las filas duplicadas del conjunto de resultados.
  • Se aplica a la fila seleccionada completa, no a una sola columna.
  • Todos los valores NULL se agrupan en un único valor.
  • ORDER BY se ejecuta después de la deduplicación; sus columnas deben estar seleccionadas.
  • Requiere trabajo adicional, por lo que debe usarlo solo cuando sea necesario.

A continuación: ampliar DISTINCT a varias columnas.

SELECT DISTINCT status
FROM orders
ORDER BY status;

Preguntas frecuentes

¿La lección «Conceptos básicos de SELECT DISTINCT» es gratis?

Sí — el texto completo de «Conceptos básicos de SELECT DISTINCT» 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 «Conceptos básicos de SELECT DISTINCT»?

Devuelva únicamente filas únicas 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 1 de 4.

¿Cuánto tiempo toma la lección «Conceptos básicos de SELECT DISTINCT»?

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