Diccionario

JOIN (SQL)

La operación de SQL que combina filas de dos o más tablas usando una columna en común.

Como los datos se reparten en varias tablas, JOIN las vuelve a unir en una consulta, normalmente emparejando una clave foránea con la clave primaria de la otra tabla.

INNER JOIN devuelve solo las filas con pareja en ambas tablas; LEFT JOIN devuelve todas las de la tabla izquierda y rellena con valores vacíos lo que no tenga pareja.

Un ejemplo

Con LEFT JOIN entre clientes y pedidos ves también a los clientes que nunca han comprado, con 0 pedidos.

Por qué importa

En una base de datos bien diseñada los datos están repartidos en varias tablas para no repetirlos. Un JOIN es lo que te permite volver a combinarlos en una sola consulta: por ejemplo, listar cada pedido junto al nombre del cliente que lo hizo, uniendo pedidos y clientes por el identificador del cliente.

Es una de las partes de SQL que más se usa y más cuesta al principio. Conviene conocer los tipos principales: INNER JOIN devuelve solo las filas con coincidencia en ambas tablas; LEFT JOIN conserva todas las filas de la tabla izquierda aunque no tengan pareja, rellenando con nulos; RIGHT JOIN hace lo contrario; y FULL JOIN conserva las de ambas. Elegir el tipo equivocado hace que desaparezcan filas que esperabas ver o que aparezcan duplicadas.

Confusiones frecuentes

El error más común es olvidar la condición de unión (ON), lo que produce un producto cartesiano: cada fila de una tabla combinada con todas las de la otra, y un resultado enorme y absurdo. Otra confusión es usar INNER JOIN cuando se quieren también las filas sin pareja: un cliente sin pedidos desaparece del resultado, y para verlo hay que usar LEFT JOIN. Y no es una operación de texto: se unen por valores de columnas, normalmente clave foránea contra clave primaria, no por posición de las filas.

Preguntas frecuentes

¿Cuál es la diferencia entre `INNER JOIN` y `LEFT JOIN`?

INNER JOIN solo muestra filas con coincidencia en las dos tablas. LEFT JOIN muestra todas las de la izquierda y, si no hay pareja, deja nulos en las columnas de la derecha.

¿Por qué mi consulta devuelve filas duplicadas?

Porque la relación es de uno a muchos: una fila de una tabla coincide con varias de la otra. Es lo esperado; si no lo quieres, agrupa con GROUP BY o usa DISTINCT.