🙏 Realmente necesitamos su apoyo. Necesitamos financiamiento para continuar nuestra misión: publicar nuevas lecciones y mejorar la plataforma. Si puede, por favor apoye el proyecto con una donación. Ayude al proyecto ahora →
Código SQL copiado al portapapeles

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 INNER es opcional. Escribir JOIN y INNER JOIN producirá 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:

  1. La primera unión conecta actor y film_actor basado en actor_id.
  2. La segunda unión conecta el resultado de la primera unión con la tabla film basado en film_id.
  3. 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 JOIN subsecuentes.
  • Usar alias de tabla (AS ci, AS co) hace que las uniones complejas sean mucho más fáciles de leer y escribir.