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.
¿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:
- Indicas las dos tablas que quieres unir.
- Defines la condición de unión en la cláusula
ON, por ejemplo,customer.customer_id = payment.customer_id. - 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.
Obtener la lista de clientes y sus pagos: Esta consulta une las tablas
customerypaymentpara 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 pindica que unimos la tablapayment.ON c.customer_id = p.customer_ides la condición que define cómo se relacionan las filas.cypson alias, que hacen la consulta más corta y legible.
Obtener la lista de películas y su idioma: Unamos las tablas
filmylanguagepara 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. JOINno modifica los datos originales; crea un conjunto de resultados temporal.- En las siguientes lecciones veremos en detalle
INNER JOIN,LEFT JOIN,RIGHT JOINyFULL 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.