LEFT JOIN es uno de los 7 tipos de join’s que se puede implementar en una instrucción SELECT y permite obtener información de dos tablas, pero siempre considerando que los registros resultantes deben estar en la primera, pudiendo regresar los que están en la segunda tabla, o no. Las dos variantes de left join se ejemplifican a continuación.
Left Join con todos los registros de la primera tabla
En este caso se hace un Select a la tabla A y un Left join con la tabla B, y los registros resultantes son todos los de la tabla A, aún y cuando no exista su registro correspondiente en la tabla B.
La estructura general de este primer tipo de LEFT JOIN es como sigue
SELECT campos FROM A
LEFT JOIN B ON A.llave=B.llave
Datos de prueba
Para ejemplificar estos casos usaremos las siguientes tablas y registros.
Se crearán 3 tablas (personal, direcciones y correos) con información del personal de una empresa, donde la llave es el ID. Las tres tablas cuentan con 5 registros, pero no de los mismos empleados. Una lista del contenido de cada tabla se muestra a continuación.
Ejemplos de primer LEFT JOIN
Usando las tablas de PERSONAL y DIRECCIONES se puede hacer un LEFT JOIN de la siguiente manera
SELECT A.*, B.* FROM personal A
LEFT JOIN direcciones B ON A.id = B.id
El resultado contiene todos los registros de la primera tabla (personal) tengan o no su correspondencia con la segunda tabla (direcciones)
Si el SELECT invierte las tablas el resultado es diferente, porque el orden de las tablas si afecta al resultado.
SELECT A.*, B.* FROM direcciones A
LEFT JOIN personal B ON A.id = B.id
LEFT JOIN con los datos de la primera tabla, pero no la intersección
En este caso se toma como base la primera tabla, pero solo se muestran los datos que están en la primera, eliminando los que están en la segunda, es decir, la intersección. Para ejecutar este tipo de LEFT JOIN se aplica una ligera variación:
Ejemplos de segundo tipo de LEFT JOIN
En este caso, y utilizando las mismas tablas del ejemplo anterior, se puede tener lo siguiente
SELECT A.*, B.*
FROM personal A
LEFT JOIN direcciones B
ON A.id = B.id
WHERE B.id IS NULL
Como se puede ver, solo se obtienen los registros que están en la primera tabla que NO están en la segunda. En el primer LEFT JOIN aparecen los 5 registros de la primera tabla, y en este segundo LEFT JOIN aparecen solo dos.
En el caso que se inviertan las tablas, el resultado es muy diferente.
SELECT A.*, B.*
FROM direcciones A
LEFT JOIN personal B
ON A.id = B.id
WHERE B.id IS NULL