Regístrate para acceder a más de 15 cursos gratuitos de programación con un simulador

Líneas Únicas Fundamentos de SQL

Imagina que queremos saber a qué cursos se han inscrito los estudiantes en la escuela. La tabla course_members guarda los datos de inscripción. Empecemos con una consulta simple:

SELECT course_id FROM course_members ORDER BY course_id;
course_id
10
12
12
...

Ver en DB Fiddle

Como puedes ver, algunos course_id se repiten: varios estudiantes se inscribieron en el mismo curso. Pero si solo queremos ver la lista de cursos disponibles, sin importar cuántos alumnos tenga cada uno, necesitamos eliminar los repetidos.

El operador DISTINCT

Para mostrar solo valores únicos, usamos DISTINCT. Con él, la base de datos elimina los duplicados y deja una sola versión de cada valor.
SELECT DISTINCT course_id
FROM course_members
ORDER BY course_id;
course_id
10
12
15
...

Ver en DB Fiddle

✅ Ahora cada curso aparece una sola vez.

💡 Basta con escribir DISTINCT justo después de SELECT, y funcionará para todas las columnas que incluyas en la consulta.

Combinaciones únicas de varios campos

A veces queremos que el resultado sea único no por una sola columna, sino por una combinación. Por ejemplo, cada par “curso + estudiante” debe aparecer solo una vez:

SELECT DISTINCT course_id, user_id
FROM course_members
ORDER BY course_id;
course_id user_id
2 5
10 19
12 4
12 65

Ver en DB Fiddle

DISTINCT se escribe solo una vez, sin importar cuántas columnas uses.

DISTINCT ON: una versión más flexible

PostgreSQL tiene una variante más avanzada: DISTINCT ON. Nos permite decidir por qué campo debe haber unicidad, y al mismo tiempo mostrar otros datos relacionados.

Por ejemplo, queremos mostrar cada curso una sola vez, junto con la fecha en que el primer estudiante se inscribió:

SELECT DISTINCT ON (course_id)
  course_id,
  created_at
FROM course_members
ORDER BY course_id, created_at;

💬 Aquí:

  • DISTINCT ON (course_id) asegura que cada curso aparezca una sola vez.
  • ORDER BY course_id, created_at define cuál fila se conserva — en este caso, la primera por fecha.

Ver en DB Fiddle

Mostrar la última inscripción de cada curso

Si queremos lo contrario —mostrar la última inscripción de cada curso— basta con cambiar el orden:

SELECT DISTINCT ON (course_id)
  course_id,
  created_at
FROM course_members
ORDER BY course_id, created_at DESC;

Ver en DB Fiddle

🧩 La clave es que el campo dentro de DISTINCT ON (...) debe aparecer también en ORDER BY. De lo contrario, el resultado será impredecible.

Comparación entre DISTINCT y DISTINCT ON

🔹 DISTINCT

SELECT DISTINCT course_id

Devuelve solo valores únicos de una o varias columnas.
🔸 DISTINCT ON

SELECT DISTINCT ON (course_id)

Devuelve un único valor por curso, pero con más información (por ejemplo, la fecha más reciente).


Resumen

  • DISTINCT elimina filas duplicadas y deja solo valores únicos.
  • Puedes usarlo con una o varias columnas.
  • DISTINCT ON (solo en PostgreSQL) permite definir exactamente qué campo debe ser único y qué otros mostrar.
  • El orden de los resultados depende de ORDER BY — ¡úsalo siempre junto a DISTINCT ON!

Materiales adicionales

  1. DISTINCT / PostgreSQL (en inglés)

Para acceder completo a curso necesitas un plan básico

El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.

Obtener acceso
130
cursos
1000
ejercicios
2000+
horas de teoría
3200
test

Obtén acceso

Cursos de programación para principiantes y desarrolladores experimentados. Comienza tu aprendizaje de forma gratuita

  • 130 cursos, 2000+ horas de teoría
  • 1000 ejercicios prácticos en el navegador
  • 360 000 estudiantes
Al enviar el formulario, aceptas el «Política de privacidad» y los términos de la «Oferta», y también aceptas los «Términos y condiciones de uso»

Nuestros graduados trabajan en empresas como:

Bookmate
Health Samurai
Dualboot
ABBYY