Lección 5.2: INNER JOIN - Combinando Filas Coincidentes
En la lección anterior, establecimos el concepto fundamental de unir tablas para recuperar datos relacionados. El tipo de unión más común y utilizado frecuentemente es el INNER JOIN. En esta lección, exploraremos su lógica, sintaxis y aplicaciones prácticas en detalle.
¿Qué es un INNER JOIN?
Un INNER JOIN es una operación que combina filas de dos tablas solo cuando hay un valor coincidente en ambas tablas basado en una condición especificada. Si una fila en la Tabla A no tiene una coincidencia correspondiente en la Tabla B, esa fila se excluye del conjunto de resultados. De manera similar, cualquier fila en la Tabla B que no coincida con la Tabla A también se deja fuera.
Piénsalo como la intersección de dos conjuntos de datos.
Visualización:
Tabla A (cliente) Tabla B (pago)
+----+----------+ +----+----------+
| id | nombre | | id | monto |
+----+----------+ +----+----------+
| 1 | Alice | <--------> | 1 | 10.00 | (¡Coincidencia!)
| 2 | Bob | | 1 | 15.00 | (¡Coincidencia!)
| 3 | Charlie | | 4 | 20.00 | (Sin coincidencia para Charlie o ID 4)
+----+----------+ +----+----------+
En este ejemplo, Charlie es excluido porque no tiene pagos, y el pago con customer_id 4 es excluido porque no hay cliente con ese ID.
Sintaxis de INNER JOIN
La sintaxis estándar para un INNER JOIN es:
SELECT
table1.column1,
table2.column2
FROM
table1
INNER JOIN
table2 ON table1.common_column = table2.common_column;
INNER JOIN: Especifica que solo queremos filas coincidentes.ON: Define la condición para la coincidencia (generalmente la Clave Primaria de una tabla y la Clave Foránea de otra).
Nota: En la mayoría de las bases de datos SQL (como MySQL, PostgreSQL y SQL Server), la palabra clave
INNERes opcional. EscribirJOINyINNER JOINproducirá el mismo resultado.
Ejemplos Prácticos (Base de Datos Sakila)
1. Conectando Ciudades a Países
La tabla city contiene un country_id que se refiere a la tabla country. Para ver el nombre de la ciudad junto con el nombre de su país, usamos un INNER JOIN.
SELECT
ci.city,
co.country
FROM
city AS ci
INNER JOIN
country AS co ON ci.country_id = co.country_id;
Esta consulta devuelve solo las ciudades que están vinculadas a un país válido.
2. Listando Personal y Sus Direcciones
Para encontrar dónde vive cada miembro del personal, unimos las tablas staff y address.
SELECT
s.first_name,
s.last_name,
a.address,
a.district
FROM
staff AS s
INNER JOIN
address AS a ON s.address_id = a.address_id;
Uniendo Más de Dos Tablas
Puedes encadenar múltiples cláusulas INNER JOIN para reunir información de varias tablas a la vez. Por ejemplo, para ver en qué películas ha aparecido un actor, necesitamos tres tablas: actor, film y la tabla de unión film_actor.
SELECT
a.first_name,
a.last_name,
f.title
FROM
actor AS a
INNER JOIN
film_actor AS fa ON a.actor_id = fa.actor_id
INNER JOIN
film AS f ON fa.film_id = f.film_id
LIMIT 10;
Cómo funciona:
- La primera unión conecta
actoryfilm_actorbasado enactor_id. - La segunda unión conecta el resultado de la primera unión con la tabla
filmbasado enfilm_id. - Solo los registros que existen en las tres tablas satisfacen la condición y aparecen en los resultados.
Conclusiones Clave de Esta Lección
- INNER JOIN es el tipo de unión por defecto en SQL.
- Devuelve filas solo cuando hay una coincidencia en ambas tablas.
- Las filas que no cumplen con la condición de unión son descartadas del conjunto de resultados.
- Puedes unir múltiples tablas agregando declaraciones
INNER JOINsubsecuentes. - Usar alias de tabla (
AS ci,AS co) hace que las uniones complejas sean mucho más fáciles de leer y escribir.