Explicación de los Join en SQL

Hola a todos, en la entrada de hoy explicare de una forma sencilla y eficaz que son los Join de tablas en SQL y cuales son los diferentes tipos.

Yo, al igual que muchos informáticos, mantengo una relación de Amor/Odio con SQL, ya que hay muchos conceptos que no están muy claros y uno de ellos era el de los Join, por eso como ya lo se quiero explicarlo de una forma sencilla, para que la gente que quiera aprender le cueste menos que a mi. Empecemos!!

Supongamos que tenemos las dos siguientes tablas. La tabla A está a la izquierda, y la tabla B está a la derecha. Las rellenaremos con cuatro registros cada una.

Ahora unamos estas dos tablas por el campo nombre de algunas formas distintas, y veamos si podemos obtener unas representaciones conceptuales con los ingeniosos diagramas de Venn.

Inner join sólo produce los registros que coinciden en las dos tablas A y B.

SELECT * FROM TablaA
INNER JOIN TablaB
ON TablaA.nombre = TablaB.nombre




Full outer join produce el conjunto de todos los registros en las tablas A y B, con registros coincidentes en ambos lados cuando sea posible. Si no hay coincidencia, el lado que falta contendrá null.

SELECT * FROM TablaA
FULL OUTER JOIN TablaB
ON TablaA.nombre = TablaB.nombre














Left outer join produce el conjunto completo de registros de la tabla A, con los registros coincidentes (si están disponibles) en la tabla B. Si no hay coincidencia, el lado derecho contendrá null.

SELECT * FROM TablaA
LEFT OUTER JOIN TablaB
ON TablaA.nombre = TablaB.nombre


Para producir el conjunto de registros en la tabla A, pero no en la tabla B, usamos el mismo Left Outer Join, y luego excluimos los registros que no queremos del lado derecho mediante una cláusula Where.

 SELECT * FROM TablaA
LEFT OUTER JOIN TablaB
ON TablaA.nombre = TablaB.nombre
WHERE TablaB.id IS NULL



Para producir el conjunto de registros únicos de la tabla A y la tabla B, usamos el mismo Full Outer Join, y luego excluimos los registros que no queremos de los dos lados mediante una cláusula Where.

SELECT * FROM TablaA
FULL OUTER JOIN TablaB
ON TablaA.nombre = TablaB.nombre
WHERE TablaA.id IS NULL
OR TablaB.id IS NULL



Espero que les guste la explicación y les sirva mucho.