JOIN es un operador que sirve para combinar datos de varias tablas que comparten una clave común.

SQL (Structured Query Language, o «Lenguaje de Consulta Estructurado») se creó para trabajar con bases de datos relacionales. En estas bases de datos, los datos se presentan en forma de tablas. Las dependencias entre varias tablas se establecen mediante columnas de enlace o columnas relacionales.

Cuando se solicitan datos de una sola tabla, no es necesaria la interacción con las columnas de enlace. Pero si necesitas agregar datos de varias tablas, debes describir las reglas: cómo se vincularán las filas en función de los valores de las columnas de enlace. Aquí es donde entra en juego el operador JOIN.

¿Qué es el operador JOIN en SQL?

Diagrama de Venn que muestra visualmente los diferentes tipos de JOIN en SQL: LEFT JOIN, RIGHT JOIN, INNER JOIN y FULL JOIN.
Tipos de JOIN en SQL.

JOIN es un operador que se utiliza para combinar filas de dos o más tablas basándose en una columna de enlace común entre ellas. A dicha columna también se la conoce como clave.

Para comprender los fundamentos de SQL, puedes inscribirte en el curso «SQL». Aprenderás a crear tablas y a elaborar consultas para el análisis. Descubrirás cómo conectar y procesar varias tablas y utilizar funciones de ventana.

Curso Experto en SQL

Supongamos que tenemos una tabla de pedidos (Orders):

OrderIDCustomerIDOrderDate
3041012110-05-2021
3041023420-06-2021
3041032225-07-2021

Y una tabla de clientes (Customers):

CustomerIDCustomerNameContactName
21Servicios MelódicosIván López
22Astas y PezuñasSebastián Ruiz
23Gestión RaízPedro Martínez

La columna CustomerID en la tabla Orders se corresponde con la columna CustomerID en la tabla Customers. Es decir, es la columna de enlace de las dos tablas. Para saber cuándo, qué cliente y qué pedido realizó, puedes elaborar la siguiente consulta:

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
JOIN Customers
ON Orders.CustomerID = Customers.CustomerID;

El resultado de la consulta será:

OrderIDCustomerNameOrderDate
304101Servicios Melódicos10-05-2021
304103Astas y Pezuñas25-07-2021

Sintaxis general del operador JOIN:

JOIN <Nombre de la tabla para unir> ON <Condición de unión basada en las columnas de enlace>

También puedes unir más de dos tablas: añade otro operador JOIN a la consulta. Por ejemplo, además de las dos tablas anteriores, tenemos una tabla de vendedores (Managers):

OrderIDManagerNameContactDate
304101Arturo López05-05-2021
304102Eduardo Ortiz15-06-2021
304103Eugenio Sánchez20-07-2021

La tabla de vendedores está relacionada con la tabla de pedidos (Orders) mediante la columna OrderID. Para obtener, además de la consulta anterior, qué vendedor atendió el pedido, elabora la siguiente consulta:

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate, Managers.ManagerName
FROM Orders
JOIN Customers
ON Orders.CustomerID = Customers.CustomerID
JOIN Managers
ON Orders.OrderId = Managers.OrderId

Resultado:

OrderIDCustomerNameOrderDateManagerName
304101Servicios Melódicos10-05-2021Arturo López
304103Astas y Pezuñas25-07-2021Eugenio Sánchez

Nuestro ponente te contará más en el vídeo.

Unión interna (INNER JOIN)

Si utilizas el operador INNER JOIN, solo aparecerán en el resultado de la consulta aquellas entradas que cumplan la condición de unión. Otra condición es que las entradas deben estar en ambas tablas. En el resultado final del ejemplo anterior no aparecen las entradas con CustomerID=23 y OrderID=304102: no hay correspondencia para ellas en las tablas.

Sintaxis general de la consulta INNER JOIN:

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
Diagrama de Venn que ilustra el funcionamiento de una unión interna (INNER JOIN) en bases de datos.
Unión interna (INNER JOIN).

La palabra INNER en la consulta se puede omitir; en ese caso, la sintaxis general de la consulta será la siguiente:

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;

Uniones externas (OUTER JOIN)

Si utilizas una unión externa, el resultado de la consulta incluirá no solo las entradas con coincidencias en ambas tablas, sino también las entradas de una de las tablas por completo. En esto se diferencia la unión externa de la interna.

La indicación de la tabla de la que se deben seleccionar todas las entradas sin filtrar se denomina tipo de unión o dirección de la unión (según se trate de una unión izquierda o derecha).

LEFT OUTER JOIN / LEFT JOIN

En el resultado final de esta unión aparecerán todas las entradas de la tabla de la izquierda (la primera), incluso si no hay ninguna coincidencia con la tabla de la derecha. Además, se incluirán las entradas de la segunda tabla que cumplan la condición de unión.

Diagrama de Venn que ilustra el funcionamiento de una unión izquierda (LEFT JOIN) en bases de datos.
Unión izquierda (LEFT JOIN).

Sintaxis:

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;

Ejemplo:

Tabla Orders:

OrderIDCustomerIDOrderDate
3041012110-05-2021
3041023420-06-2021
3041032225-07-2021

Tabla Customers:

CustomerIDCustomerNameContactName
21Servicios MelódicosIván López
22Astas y PezuñasSebastián Ruiz
23Gestión RaízPedro Martínez

Consulta:

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate 
FROM Orders
LEFT JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;

Resultado:

OrderIDCustomerNameOrderDate
304101Servicios Melódicos10-05-2021
304102NULL20-06-2021
304103Astas y Pezuñas25-07-2021

He mantenido la traducción exacta y ajustado los nombres según tu solicitud. Si necesitas más cambios, avísame.

RIGHT OUTER JOIN / RIGHT JOIN

En el resultado final de esta unión aparecerán todas las entradas de la tabla de la derecha (la segunda), incluso si no hay ninguna coincidencia con la tabla de la izquierda. Además, se incluirán las entradas de la primera tabla que cumplan la condición de unión.

Diagrama de Venn que ilustra el funcionamiento de una unión derecha (RIGHT JOIN) en bases de datos.
Unión derecha (RIGHT JOIN).

Sintaxis:

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;

Ejemplo:

Tabla Orders:

OrderIDCustomerIDOrderDate
3041012110-05-2021
3041023420-06-2021
3041032225-07-2021

Tabla Customers:

CustomerIDCustomerNameContactName
21Servicios MelódicosIván López
22Astas y PezuñasSebastián Ruiz
23Gestión RaízPedro Martínez

Consulta:

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
RIGHT JOIN Customers
ON Orders.CustomerID = Customers.CustomerID;

Resultado:

OrderIDCustomerNameOrderDate
304101Servicios Melódicos10-05-2021
nullGestión Raíznull
304103Astas y Pezuñas25-07-2021

FULL OUTER JOIN / FULL JOIN

En el resultado final de esta unión aparecerán todas las entradas de ambas tablas, independientemente de si se cumple la condición de unión o no. Esto incluye las filas de ambas tablas que no tienen correspondencia en la otra.

Diagrama de Venn que ilustra el funcionamiento de una unión externa completa (FULL OUTER JOIN) en bases de datos.
Unión externa completa (FULL OUTER JOIN).

Sintaxis:

SELECT column_name(s)
FROM table1
FULL JOIN table2
ON table1.column_name = table2.column_name;

Ejemplo:

Tabla Orders

OrderIDCustomerIDOrderDate
3041012110-05-2021
3041023420-06-2021
3041032225-07-2021

Tabla Customers:

CustomerIDCustomerNameContactName
21Servicios MelódicosIván López
22Astas y PezuñasSebastián Ruiz
23Gestión RaízPedro Martínez

Consulta:

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
FULL JOIN Customers
ON Orders.CustomerID = Customers.CustomerID;

Resultado:

OrderIDCustomerNameOrderDate
304101Servicios Melódicos10-05-2021
304102null20-06-2021
304103Astas y Pezuñas25-07-2021
nullGestión Raíznull

Unión cruzada (CROSS JOIN)

Este operador se diferencia de los operadores de unión anteriores: no es necesario especificar una condición de unión (ON table1.column_name = table2.column_name). Las entradas en la tabla con los resultados son el resultado de la combinación de cada entrada de la tabla de la izquierda con las entradas de la tabla de la derecha. A esta acción se la denomina producto cartesiano.

Diagrama que ilustra el funcionamiento de una unión cruzada (CROSS JOIN) en bases de datos, mostrando todas las combinaciones posibles entre dos tablas.
Unión cruzada (CROSS JOIN).

Sintaxis:

SELECT column_name(s)
FROM table1
CROSS JOIN table2;

Ejemplo:

Tabla Orders:

OrderIDCustomerIDOrderDate
3041012110-05-2021
3041023420-06-2021
3041032225-07-2021

Tabla Customers:

CustomerIDCustomerNameContactName
21Servicios MelódicosIván López
22Astas y PezuñasSebastián Ruiz
23Gestión RaízPedro Martínez

Consulta:

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
CROSS JOIN Customers;

Resultado:

OrderIDCustomerNameOrderDate
304101Servicios Melódicos10-05-2021
304101Astas y Pezuñas10-05-2021
304101Gestión Raíz10-05-2021
304102Servicios Melódicos20-06-2021
304102Astas y Pezuñas20-06-2021
304102Gestión Raíz20-06-2021
304103Servicios Melódicos25-07-2021
304103Astas y Pezuñas25-07-2021
304103Gestión Raíz25-07-2021

Unión propia (SELF JOIN)

Se utiliza cuando en una consulta es necesario conectar varias entradas de una misma tabla.

En SQL no hay un operador independiente para describir las SELF JOIN. Por lo tanto, para describir la conexión de datos de una misma tabla, utiliza los operadores JOIN o WHERE.

Ten en cuenta que en una sola consulta no puedes utilizar dos veces el nombre de una misma tabla: de lo contrario, la consulta devolverá un error. Por lo tanto, para realizar la conexión de una tabla SQL consigo misma, en la consulta se le asignan dos nombres temporales diferentes: alias.

Sintaxis de SELF JOIN al utilizar el operador JOIN:

SELECT column_name(s)
FROM table1 a1
JOIN table1 a2
ON a1.column_name = a2.column_name;

El operador JOIN puede ser cualquiera: utiliza LEFT JOIN, RIGHT JOIN. El resultado será el mismo que cuando se unían dos tablas diferentes.

Sintaxis de la unión propia al utilizar el operador WHERE:

SELECT column_name(s)
FROM table1 a1, table1 a2
WHERE a1.common_col_name = a2.common_col_name;

Ejemplo:

Tabla Students:

StudentIDNameCourseIDDuration
1Antony13
2Paola24
1Antony24
3Boris32
2Irina35

Consulta con el operador WHERE:

SELECT s1.StudentID, s1.Name
FROM Students AS s1, Students s2
WHERE s1.StudentID = s2.StudentID
AND s1.CourseID <> s2.CourseID;

Resultado:

StudentIDName
1Antony
2Irina
1Antony
2Paola

Consulta con el operador JOIN:

SELECT s1.StudentID, s1.Name
FROM Students s1
JOIN Students s2
ON s1.StudentID = s2.StudentID
AND s1.CourseID <> s2.CourseID
GROUP BY StudentID;

Resultado:

StudentIDName
1Antony
2Irina

Lo más importante sobre JOIN en SQL

  • En SQL, se utilizan los operadores de unión JOIN para combinar datos de varias tablas. Cuando el resultado debe contener solo los datos de dos tablas con una clave común, se utiliza INNER JOIN o simplemente JOIN.
  • Si necesitas una lista completa de las entradas de una de las tablas, combinadas con los datos de otra, utiliza los operadores LEFT y RIGHT JOIN.
  • Si el resultado debe contener la lista completa de las entradas de ambas tablas, donde algunas entradas están combinadas, utiliza el operador FULL JOIN.
  • Si necesitas el producto cartesiano de dos tablas, utiliza el operador CROSS JOIN. Si necesitas conectar datos de una misma tabla entre sí, necesitas una SELF JOIN.

Aprende a escribir consultas SQL en el curso «SQL». Aprende las funciones agregadas, las subconsultas y WITH, JOIN, las funciones de ventana y mucho más, y además, resuelve un problema empresarial con SQL.

Curso Experto en SQL

Categorizado en:

Base Datos, SQL,