📘 Lección 9: JOINs — combinando tablas en SQL

🔹 Introducción

Hasta ahora trabajamos siempre con una sola tabla (alumnos).
Pero en bases de datos reales casi siempre hay múltiples tablas relacionadas:

  • Una tabla de alumnos.
  • Una tabla de cursos.
  • Una tabla de inscripciones que relaciona alumnos con cursos.

👉 Para consultar información de varias tablas al mismo tiempo, usamos los JOINs.

Los principales son:

  • INNER JOIN → devuelve solo las filas que coinciden en ambas tablas.
  • LEFT JOIN → devuelve todas las filas de la tabla izquierda y las coincidentes de la derecha (o NULL si no hay coincidencia).
  • RIGHT JOIN → igual que LEFT JOIN, pero al revés.

🔹 1. Tablas de ejemplo

Creamos una segunda tabla llamada cursos:

CREATE TABLE cursos (
    id INT,
    curso VARCHAR(50)
);

INSERT INTO cursos (id, curso) VALUES
(1, 'Matemáticas'),
(2, 'Historia'),
(3, 'Inglés');

Y una tabla inscripciones que conecta alumnos con cursos:

CREATE TABLE inscripciones (
    alumno_id INT,
    curso_id INT
);

INSERT INTO inscripciones (alumno_id, curso_id) VALUES
(1, 1), -- Ana en Matemáticas
(1, 3), -- Ana en Inglés
(2, 2), -- Juan en Historia
(3, 1), -- Laura en Matemáticas
(4, 3); -- Pedro en Inglés

👉 Ahora tenemos:

  • alumnos: info de cada estudiante.
  • cursos: info de cada curso.
  • inscripciones: relación alumno ↔ curso.

🔹 2. INNER JOIN (solo coincidencias)

Queremos saber qué alumnos están en qué curso:

SELECT a.nombre, c.curso
FROM inscripciones i
INNER JOIN alumnos a ON i.alumno_id = a.id
INNER JOIN cursos c ON i.curso_id = c.id;

📊 Resultado esperado:

nombrecurso
AnaInglés
AnaMatemáticas
JuanHistoria
LauraMatemáticas
PedroInglés

👉 INNER JOIN devuelve solo registros donde existe coincidencia en ambas tablas.

🔹 3. LEFT JOIN (todos de la izquierda)

Queremos listar todos los alumnos, aunque no estén inscriptos en cursos:

SELECT a.nombre, c.curso
FROM alumnos a
LEFT JOIN inscripciones i ON a.id = i.alumno_id
LEFT JOIN cursos c ON i.curso_id = c.id;

📊 Resultado esperado:

nombrecurso
AnaInglés
AnaMatemáticas
JuanHistoria
LauraMatemáticas
PedroInglés

(Si hubiera un alumno sin cursos, aparecería con NULL en curso).

🔹 4. RIGHT JOIN (todos de la derecha)

Queremos listar todos los cursos, incluso los que todavía no tienen alumnos:

SELECT c.curso, a.nombre
FROM cursos c
RIGHT JOIN inscripciones i ON c.id = i.curso_id
RIGHT JOIN alumnos a ON i.alumno_id = a.id;

👉 Si existiera un curso sin alumnos, aparecería con NULL en la columna de nombre.

🔹 5. Ejemplo combinado

Supongamos que queremos saber el número de alumnos por curso:

SELECT c.curso, COUNT(a.id) AS cantidad_alumnos
FROM cursos c
LEFT JOIN inscripciones i ON c.id = i.curso_id
LEFT JOIN alumnos a ON i.alumno_id = a.id
GROUP BY c.curso;

📊 Resultado esperado:

cursocantidad_alumnos
Matemáticas2
Historia1
Inglés2

🔹 6. Ejercicio práctico

  1. Muestra los nombres de los alumnos junto con los cursos en los que están inscriptos (INNER JOIN).
  2. Muestra todos los alumnos y los cursos, incluso si un alumno no está inscripto (LEFT JOIN).
  3. Muestra todos los cursos y la cantidad de alumnos en cada uno (GROUP BY con JOIN).

🔹 Soluciones

SELECT a.nombre, c.curso
FROM inscripciones i
INNER JOIN alumnos a ON i.alumno_id = a.id
INNER JOIN cursos c ON i.curso_id = c.id;
SELECT a.nombre, c.curso
FROM alumnos a
LEFT JOIN inscripciones i ON a.id = i.alumno_id
LEFT JOIN cursos c ON i.curso_id = c.id;
SELECT c.curso, COUNT(a.id) AS cantidad_alumnos
FROM cursos c
LEFT JOIN inscripciones i ON c.id = i.curso_id
LEFT JOIN alumnos a ON i.alumno_id = a.id
GROUP BY c.curso;

📝 Mini Quiz

 

Resultados

#1. ¿Qué hace un INNER JOIN?

#2. ¿Qué hace un LEFT JOIN?

#3. Si quiero obtener todos los cursos aunque no tengan alumnos, ¿qué tipo de JOIN debo usar?

Previa
Finalizar

🔹 Resumen de la lección

  • Los JOINs permiten combinar datos de varias tablas.
  • INNER JOIN: solo coincidencias entre tablas.
  • LEFT JOIN: todos los registros de la tabla izquierda + coincidencias.
  • RIGHT JOIN: todos los registros de la tabla derecha + coincidencias.
  • Se pueden combinar JOINs con funciones de agregación (COUNT, AVG, etc.) para obtener estadísticas.

👉 En la próxima lección aprenderás sobre subconsultas (subqueries): consultas dentro de otras consultas, muy útiles para resolver problemas más complejos.

📝 Revisa el temario completo del curso SQL y selecciona la próxima lección que te interese.

Scroll al inicio