En el mundo de las bases de datos relacionales encontramos las palabras claves inner, left y right join, que se usan para encontrar relaciones entre dos tablas indexadas. En este artículo vamos a ahondar sobre la utilidad y diferencias de cada una de ellas.
Para este fin vamos como a usar como ejemplo dos tablas indexadas entre sí, una llamada clientes y la otra ventas. Las dos tablas se relacionan entre sí por medio campos clientes.id (PK) y ventas.cliente_id (FK).


Tabla Ventas – Diferencia inner, left. right join
Te invitamos a seguir leyendo las siguientes páginas donde mostraremos la diferencia entre las relaciones inner, left y right join:
Relación Inner Join
Con esta relación se van a obtener los registros que son comunes a ambas tablas. En nuestro ejemplo, como la relación es entre los campos clientes.id y ventas.cliente_id, el inner join va a obtener los registros donde ambos campos son iguales.
En el diagrama de Venn se muestra lo que se quiere obtener con esta relación del ejemplo:

En términos de consulta SQL para MySQL tendríamos la siguiente sintaxis para el ejemplo:
select * from clientes c inner join ventas v on c.id=v.cliente_id
Que en nuestro ejemplo da como resultado:

Vemos entonces que aparecen con Inner Join los registros comunes a las dos tablas donde son iguales clientes.id y ventas.cliente_id, es decir donde están los códigos 1 y 3.
Relación Left Join
Con Left Join se obtiene además de los registros comunes del inner join, los registros que pertenecen a la tabla que se nombra a la izquierda de la consulta.
Para nuestro ejemplo en el diagrama de Venn es así:

Que en consulta SQL para el ejemplo sería así:
select * from clientes c left join ventas v on c.id=v.cliente_id
Y da como resultado:

Ahora con Left Join se obtienen los registros del inner join (1 y 3), más los restantes registros de la tabla clientes (2 y 4).
Relación Right Join
Con Right Join se obtiene además de los registros comunes de inner, los que pertenecen a la tabla que se nombra a la derecha de la consulta.
Para el ejemplo en cuestión en el diagrama de Venn es así:

Y da como resulado en el ejemplo:
select * from clientes c left join ventas v on c.id=v.cliente_id

Aquí vemos que además de los registros del inner join (1,3), se obtuvieron los registros que faltaban de la tabla ventas (8).
Relación Left Outer Join
Con Left Outer Join se obtienen los registros de la tabla de la izquierda que no son comunes a ambas tablas.
Que en términos del diagrama de Venn del ejemplo sería así:

Como estamos usando MySQL en el ejemplo, esta SQL sería como ésta:
select * from clientes c left join ventas v on c.id=v.cliente_id where v.cliente_id is null
Y da como resultado:

Aquí vemos que sólo salen los registros 2 y 4 de la tabla clientes, que no son comunes con la tabla Ventas.
Relación Right Outer Join
Con Right Outer Join se obtienen los registros de la tabla de la derecha que no son comunes a ambas tablas.
Que en términos del diagrama de Venn del ejemplo sería:

Como usamos MySQL en el ejemplo, la SQL sería como ésta:
select * from clientes c right join ventas v on c.id=v.cliente_id where c.id is null
Y da como resultado:

Aquí sale sólo el registro con código 8 de la tabla ventas, que es el valor no común con la tabla clientes.
Relación Full Outer Join
Con Full Outer Join se obtienen los registros de ambas tablas que no son comunes entre ellas.
Que en el diagrama de Venn del ejemplo sería:

Como usamos MySQL en el ejemplo, esta SQL sería como ésta:
select * from clientes c left join ventas v on c.id=v.cliente_id where v.cliente_id is null
union
select * from clientes c right join ventas v on c.id=v.cliente_id where c.id is null
Y da como resultado:

Aquí no tenemos registros con valores comunes, sólo aparecen registros donde clientes.id y ventas.cliente_id no son iguales en ambas tablas.
Como conclusión, el uso adecuado de estas sentencias permite hacer consultas más efectiva en términos de tiempo y de carga de procesamiento. Es también importante anotar que para que la consulta sea más eficiente, se deben indexar las tablas y generar los llaves primarias y foráneas de las tablas que se quieren relacionar.
Este artículo hace parte del sistema de divulgación de conocimiento de ITSoftware SAS.