🎯 Quedan pocos días este mes Apoya SQLTest.online y ayúdanos a mantener la práctica de SQL gratuita para todos. Dona hoy →
Código SQL copiado al portapapeles

JOIN en SQL: cómo combinar tablas en bases de datos relacionales

Lección 5.1 · Tiempo de lectura: ~8 min · Tareas de práctica ↓

Un JOIN en SQL combina filas de dos o más tablas a partir de una columna relacionada. En esta lección aprenderás la idea básica de JOIN, cómo escribir una condición ON, por qué importan los alias de tabla y cómo consultar paso a paso datos relacionados de la base de datos Sakila.

En las bases de datos relacionales, la información se guarda como un conjunto de tablas relacionadas. Para extraer de ellas datos con sentido, necesitas saber cómo unirlas. Para eso sirve la operación JOIN de SQL: permite combinar filas de dos o más tablas a partir de una columna relacionada.

Esta lección sienta las bases para entender JOIN como concepto clave del trabajo con datos relacionales.

Fundamentos de SQL JOIN: filas de customer unidas a filas de address por address_id, y la cadena de claves customer, address, city

¿Qué es un JOIN en SQL y cómo funciona?

Un JOIN es un mecanismo que permite combinar filas de distintas tablas en un único conjunto de resultados. La unión se hace según una condición que, casi siempre, compara los valores de columnas clave.

Imagina dos tablas: customer y payment. La tabla payment tiene una columna customer_id que indica qué cliente hizo el pago. Un JOIN permite "pegar" las filas de estas dos tablas para que, en cada pago, veas el nombre del cliente y no solo su ID.

Cómo funciona:

  1. Indicas las dos tablas que quieres unir.
  2. Defines la condición de unión en la cláusula ON, por ejemplo, customer.customer_id = payment.customer_id.
  3. La base de datos recorre las filas, encuentra las parejas que coinciden y forma con ellas filas nuevas combinadas.

Visualización:

  Table A (customer)      Table B (payment)
  +----+-------+            +----+----------+
  | id | name  |            | id | amount   |
  +----+-------+            +----+----------+
  | 1  | Ivan  | <-----\    | 1  | 100.00   |
  | 2  | Maria |       \--->| 1  | 50.00    |
  | 3  | Petr  |            | 3  | 200.00   |
  +----+-------+            +----+----------+

Las flechas muestran cómo las filas de la tabla payment encuentran a su cliente en la tabla customer gracias a que el id coincide.

Cómo usar JOIN en la práctica: ejemplos con Sakila

Veamos cómo queda esto en una consulta SQL real con la base de datos Sakila.

  1. Obtener la lista de clientes y sus pagos: Esta consulta une las tablas customer y payment para mostrar el nombre y el apellido del cliente junto a cada pago.

    SELECT
        c.first_name,
        c.last_name,
        p.amount,
        p.payment_date
    FROM
        customer AS c
    JOIN
        payment AS p ON c.customer_id = p.customer_id;
    
    • JOIN payment AS p indica que unimos la tabla payment.
    • ON c.customer_id = p.customer_id es la condición que define cómo se relacionan las filas.
    • c y p son alias, que hacen la consulta más corta y legible.
  2. Obtener la lista de películas y su idioma: Unamos las tablas film y language para mostrar el título de cada película y su idioma.

    SELECT
        f.title,
        l.name AS language
    FROM
        film AS f
    JOIN
        language AS l ON f.language_id = l.language_id;
    

    Aquí la relación se establece mediante la clave language_id.


Puntos clave de esta lección:

  • Un JOIN en SQL combina filas de dos o más tablas en un único conjunto de resultados.
  • La condición ON define cómo se relacionan las filas de las distintas tablas, normalmente comparando columnas clave.
  • Los alias de tabla (customer AS c) acortan las consultas y las hacen más fáciles de leer.
  • JOIN no modifica los datos originales; crea un conjunto de resultados temporal.
  • En las siguientes lecciones veremos en detalle INNER JOIN, LEFT JOIN, RIGHT JOIN y FULL JOIN.

Preguntas frecuentes

¿Qué diferencia hay entre JOIN e INNER JOIN?

En SQL, un JOIN sin más es una forma abreviada de INNER JOIN. Los dos dan resultados idénticos. A menudo se prefiere escribir INNER JOIN de forma explícita por claridad, sobre todo cuando se mezclan distintos tipos de unión en la misma consulta.

¿Qué ocurre si la condición ON no coincide con ninguna fila?

Si ninguna fila cumple la condición ON, un INNER JOIN devuelve un resultado vacío. No se produce ningún error: la consulta simplemente devuelve cero filas. Los demás tipos de unión (LEFT JOIN, etc.) tratan de otra forma las filas sin coincidencia.

¿Se pueden unir más de dos tablas en una consulta?

Sí. Puedes encadenar varias cláusulas JOIN en una misma consulta, cada una con su propia condición ON. La base de datos las procesa de izquierda a derecha y va construyendo el resultado paso a paso.


Preguntas de entrevista

¿Cómo le explicarías JOIN a un compañero sin conocimientos técnicos?

Un JOIN es como usar un ID común para buscar información relacionada en dos hojas de cálculo. Por ejemplo, si una hoja lista los clientes con sus ID y otra lista los pagos con el ID del cliente, un JOIN te permite ver cada pago con el nombre del cliente, sin duplicar datos en ninguna de las dos hojas.

¿Qué es la cláusula ON y por qué es necesaria?

La cláusula ON indica la condición que conecta las filas de las dos tablas. Sin ella (o sin una condición válida), la base de datos generaría un producto cartesiano: cada fila de la primera tabla emparejada con cada fila de la segunda, algo que rara vez es útil y que puede ser enorme.

¿Por qué usar alias de tabla en las consultas con JOIN?

Los alias de tabla hacen las consultas más cortas y sin ambigüedades. Cuando dos tablas comparten un nombre de columna (por ejemplo, las dos tienen id), los alias permiten escribir c.id frente a p.id, de modo que la base de datos y quien lee la consulta saben exactamente a qué columna se refiere.

Intenta resolver las siguientes tareas para reforzar lo que aprendiste en esta lección.

  1. Tipos de uniones en SQL
  2. Elige el tipo de unión
  3. Elija el tipo de unión de tablas
  4. Solucionar la eliminación de filas en la tabla de hechos después del despliegue