Un join en SQL es una consulta en la que se combinan dos tablas relacionadas mediante una cláusula WHERE en la que intervienen uno o más campos comunes entre ambas.
El resultado depende del tipo de join elegido y puede incluir filas nulas si la condición no se cumple para alguna de las tablas.
Siendo T1 la primera tabla y T2 la segunda, los resultados obtenidos con cada tipo de join son los siguientes.
INNER JOIN: Filas de T1 y T2 que cumplen la condición emparejadas.
LEFT OUTER JOIN: Filas de T1 y T2 que cumplen la condición emparejadas y, por cada fila de T1 que no cumple la condición, dicha fila concatenada con una fila nula de T2.
RIGHT OUTER JOIN: Filas de T1 y T2 que cumplen la condición emparejadas y, por cada fila de T2 que no cumple la condición, dicha fila concatenada con una fila nula de T1.
FULL OUTER JOIN: Filas de T1 y T2 que cumplen la condición emparejadas y, por cada fila de T1 que no cumple la condición, dicha fila concatenada con una fila nula de T2; y, por cada fila de T2 que no cumple la condición, dicha fila concatenada con una fila nula de T1.
Ejemplos
Dadas las siguientes tablas:
EMPRESAS
COD_EMPRESA | EMPRESA |
1 | S.F. SOFTWARE |
2 | FRUTAS GARCIA |
3 | ALUMINIOS RUIZ |
5 | IMPRESIONES M. S. |
TRABAJADORES
COD_TRABAJADOR | COD_EMPRESA | TRABAJADOR |
1 | 2 | JUAN PEREZ |
2 | 2 | PEDRO SÁNCHEZ |
3 | 4 | FELIPE LÓPEZ |
4 | 5 | RODRIGO TORRES |
INNER JOIN
SELECT TRABAJADOR, EMPRESA
FROM TRABAJADORES INNER JOIN EMPRESAS
ON TRABAJADORES.COD_EMPRESA = EMPRESAS.COD_EMPRESA
o bien simplemente:
SELECT TRABAJADOR, EMPRESA
FROM TRABAJADORES, EMPRESAS
WHERE TRABAJADORES.COD_EMPRESA = EMPRESAS.COD_EMPRESA
Se obtienen los nombres de los trabajadores y el nombre de la empresa en la que trabajan.
TRABAJADOR | EMPRESA |
PEDRO SANCHEZ | FRUTAS GARCIA |
RODRIGO TORRES | IMPRESIONES M. S. |
JUAN PEREZ | FRUTAS GARCIA |
LEFT JOIN
SELECT NOMBRE_TRABAJADOR, NOMBRE_EMPRESA
FROM TRABAJADORES LEFT JOIN EMPRESAS
ON EMPRESAS.COD_EMPRESA = TRABAJADORES.COD_EMPRESA
Se obtienen los nombres de los trabajadores y el nombre de la empresa en que trabajan. Los trabajadores cuya empresa no existe en la tabla EMPRESAS aparecen también en los resultados, pero un con valor nulo en la columna proveniente de dicha tabla.
TRABAJADOR | EMPRESA |
PEDRO SANCHEZ | FRUTAS GARCIA |
FELIPE LOPEZ | (null) |
RODRIGO TORRES | IMPRESIONES M. S. |
JUAN PEREZ | FRUTAS GARCIA |
RIGHT JOIN
SELECT TRABAJADOR, EMPRESA
FROM TRABAJADORES RIGHT JOIN EMPRESAS
ON EMPRESAS.COD_EMPRESA = TRABAJADORES.COD_EMPRESA
Se obtienen los nombres de los trabajadores y el nombre de la empresa en que trabajan. Las empresas que no tengan ningún trabajador registrado en la tabla TRABAJADORES aparecen también en los resultados, pero un con valor nulo en la columna proveniente de dicha tabla.
TRABAJADOR | EMPRESA |
(null) | S. F. SOFTWARE |
JUAN PEREZ | FRUTAS GARCIA |
PEDRO SANCHEZ | FRUTAS GARCIA |
(null) | ALUMINIOS RUIZ |
RODRIGO TORRES | IMPRESIONES M. S. |
FULL OUTER JOIN
SELECT TRABAJADOR, EMPRESA
FROM TRABAJADORES FULL OUTER JOIN EMPRESAS
ON EMPRESAS.COD_EMPRESA = TRABAJADORES.COD_EMPRESA
Se obtienen los nombres de los trabajadores y el nombre de la empresa en que trabajan. También aparecen en los resultados los trabajadores que no tienen fila asociada en la tabla EMPRESAS y las empresas sin fila asociada en la tabla TRABAJADORES.
TRABAJADOR | EMPRESA |
PEDRO SANCHEZ | FRUTAS GARCIA |
FELIPE LOPEZ | (null) |
RODRIGO TORRES | IMPRESIONES M. S. |
JUAN PEREZ | FRUTAS GARCIA |
(null) | S. F. SOFTWARE |
(null) | ALUMINIOS RUIZ |