Volver a la lista de artículos Artículos
Lectura de 8 minutos

¿Qué es el OUTER JOIN en SQL?

Incluso si usted es nuevo en SQL, debe haber encontrado el término OUTER JOIN. En este artículo, explicaré lo que hace el OUTER JOIN en SQL. Utilizaré algunos ejemplos prácticos para demostrar cómo se utiliza en las aplicaciones cotidianas de SQL.

Si desea utilizar SQL con fines prácticos, aprender los diferentes JOINs es extremadamente importante. De hecho, usted utilizará un JOIN en casi todas las consultas que escriba. Por lo tanto, es imperativo que dediques algún esfuerzo a sentirte cómodo con ellos.

Aunque este artículo incluye información básica sobre JOIN en general y OUTER JOIN en particular, recomiendo a los estudiantes serios que tomen el Tipos de JOIN en SQL curso de LearnSQL.es. Es un grupo interactivo de 93 ejercicios prácticos divididos en 5 secciones, y le dará una comprensión profunda de los JOINs de SQL.

Habiendo dicho esto, entremos directamente en el tema, comenzando con lo que hace un SQL JOIN.

¿Qué es un JOIN?

Un SQL JOIN se utiliza para combinar datos de dos o más tablas y luego generar una sola tabla de salida que contiene columnas seleccionadas de ambas tablas. Generalmente se utiliza uno o más valores comunes en las tablas para vincularlas. Se especifica cómo combinar las filas de dos tablas en la condición JOIN: las filas de ambas tablas que satisfacen la condición se combinan y se añaden a la tabla de resultados.

Por ejemplo, digamos que tienes una base de datos con información de clientes. Cuando un cliente se registra en su negocio. usted guarda sus datos (Customer_Number, Customer_Name, Age, Postal_Code, y Address) en una tabla llamada customers. Los detalles de los pedidos que el cliente realiza se guardan en otra tabla llamada ordersque contiene los datos Order_Number, Order_Date, Expected_Shipping_Date, y Customer_Number.

Imagina que un cliente hace un pedido y necesitas saber su dirección de entrega. Sin embargo, la tabla orders sólo tiene la Customer_Number. Para recuperar la dirección del cliente, tendrá que JOIN las tablas customers y orders en base a la Customer_Number.

En este caso, Customer_Number sirve para comparar los valores de las columnas.

customers:

Customer_NumberCustomer_NameAgePostal_CodeAddress
103Atelier274400054, RueRoyal
112Signal32830308489 Strong
114Collector273004636 Kilda
119La Roche274400067, rue chimay
121Baane mini324110Ering Shakkes

orders:

Order_NumberOrder_DateExpected_Shipping_DateCustomer_Number
1034531-01-202210-02-2022103
1034630-01-202215-02-2022112
1012005-02-202216-02-2022114
1032506-02-202210-02-2022121
1121108-02-202221-02-20224110

Esta es la consulta que se utilizaría para vincular todos los números de pedido con los nombres y direcciones de los clientes:

SELECT 
  a.Order_Number, 
  b.Customer_Name, 
  b.Postal_Code, 
  b.Address 
FROM orders a 
JOIN customers b  
ON a.Customer_Number = b.Customer_Number;

Y aquí está el resultado:

Order_NumberCustomer_NamePostal_CodeAddress
10345Atelier4400054, RueRoyal
10346Signal830308489 Strong
10120Collectors3004636 Kilda
10325Baane Mini4110Ering Shakkes

En esta consulta, SQL selecciona las columnas Order_Number de la tabla orders y Customer_Name, Postal_Code, y Address de la tabla customers. Customer_Number es la columna utilizada en la condición JOIN. Para cada pedido, el número de cliente correspondiente de orders se compara con el número de cliente de la tabla customers tabla. El nombre del cliente, el código postal y la dirección se recuperan para ese pedido.

Este es un ejemplo clásico de INNER JOIN (también conocido como plain o regular JOIN; la palabra clave INNER es opcional). Es uno de los más utilizados JOINs en SQL. INNER JOIN significa básicamente que sólo se recuperarán las filas cuyos valores son comunes entre las dos tablas. Observe que las filas con el número de cliente 119 (que no tenía ningún pedido correspondiente) y el número de pedido 11211 (que no tenía ningún número de cliente correspondiente) no se incluyeron en el resultado.

Sin embargo, INNER JOIN no es el único JOIN que ofrece SQL. Hay varios tipos de OUTER JOIN que debe conocer.

Explicación de los OUTER JOINS

En SQL, JOINs se clasifica como:

  1. INNER JOIN - Devuelve sólo las filas cuyos valores coinciden con la condición JOIN en ambas tablas. Las filas en cualquiera de las dos tablas que no coinciden con esta condición son ignoradas.
  2. OUTER JOIN
    1. LEFT JOIN - Devuelve todas las filas de la tabla izquierda (la tabla anterior a la palabra clave JOIN ). Para las filas que tienen una coincidencia en la tabla derecha, devuelve los valores de la tabla derecha; para las filas sin coincidencia en la tabla derecha, rellena los valores que faltan con NULLs.
    2. RIGHT JOIN - Devuelve todas las filas de la tabla derecha (la tabla después de la palabra clave JOIN ). Para las filas que tienen una coincidencia en la tabla izquierda, devuelve los valores de la tabla izquierda; para las filas sin coincidencia en la tabla izquierda, rellena los valores que faltan con NULLs.
    3. FULL JOIN - Devuelve todas las filas de ambas tablas, utilizando NULLs para los valores sin coincidencia.

Para cualquier JOIN, la estructura básica de la consulta SQL es:

<SELECT <list of columns>
FROM <table 1> 
LEFT/RIGHT/FULL/INNER JOIN <table 2> 
ON <join condition>
WHERE <other conditions>;

Nota: En lugar de la palabra clave LEFT JOIN puede utilizar alternativamente LEFT OUTER JOIN. La palabra clave OUTER es opcional. Del mismo modo, puede utilizar RIGHT OUTER JOIN en lugar de RIGHT JOIN así como FULL OUTER JOIN en lugar de FULL JOIN sin ningún cambio en los resultados de la consulta.

OUTER JOIN se utiliza para recuperar todos los registros de las tablas, incluso para aquellos registros que no tienen un valor que coincida en la otra tabla basada en la condición JOIN. En estos casos, devuelve NULL como valor para las columnas que faltan.

El OUTER JOIN se utiliza para recuperar todos los registros de las tablas, incluso para aquellos registros que no tienen un valor coincidente en la otra tabla basada en la condición del JOIN. En estos casos, devuelve NULL como valor para las columnas que faltan.

Como se ha mencionado anteriormente, existen tres tipos de OUTER JOIN: LEFT OUTER JOIN RIGHT OUTER JOIN y FULL OUTER JOIN. Permítame mostrarle algunos ejemplos para demostrar cómo funcionan.

LEFT OUTER JOIN

Imagine que necesita recuperar todos los pedidos junto con la información del cliente. Pero también necesita incluir los pedidos que no tienen información del cliente. En este caso, puede utilizar un LEFT OUTER JOIN.

Consulta:


SELECT 
  a.Order_Number, 
  b.Customer_Name, 
  b.Postal_Code 
FROM orders a 
LEFT JOIN customers b -- alternatively use LEFT OUTER JOIN instead of LEFT JOIN
ON a.Customer_Number = b.Customer_Number;

Salida:

Order_NumberCustomer_NamePostal_CodeAddress
10345Atelier4400054, RueRoyal
10346Signal830308489 Strong
10120Collectors3004636 Kilda
10325Baane Mini4110Ering Shakkes

Observe que, como ha especificado "LEFT JOIN" en la consulta, esta consulta funciona recuperando primero todas las filas de la tabla izquierda y luego recuperando el valor correspondiente en la tabla derecha. La tabla izquierda es la tabla indicada antes de la palabra clave JOIN (aquí, la orders tabla). La consulta devuelve NULL en las columnas de la tabla derecha (Customer_Name, Postal_Code) para todas aquellas filas para las que no hay un valor de Número_de_cliente que coincida en la tabla de clientes. Observe que el número de pedido 11211 (el pedido sin cliente asignado) se ha incluido en los resultados, con valores NULL en las columnas Customer_Name y Postal_Code.

RIGHT OUTER JOIN

Un RIGHT OUTER JOIN funciona exactamente al revés que un LEFT OUTER JOIN. Recupera todas las filas de la tabla derecha (la tabla indicada después de la palabra clave JOIN ) y los valores correspondientes de la tabla izquierda. Hay NULLs para todas las filas para las que la tabla izquierda no tiene una coincidencia. Veamos un ejemplo.

Consulta:

SELECT 
  a.Order_Number, 
  b.Customer_Name, 
  b.Postal_Code 
FROM orders a 
RIGHT JOIN customers b -- alternatively use RIGHT OUTER JOIN instead of RIGHT JOIN
ON a.Customer_Number = b.Customer_Number;

Salida:

Order_NumberCustomer_NamePostal_Code
10345Atelier44000
10346Signal83030
10120Collectors3004
10325Baane Mini4110
NULLLa Roche44000

Aquí, el cliente (La Roche) que no ha realizado ningún pedido está en los resultados de la consulta; el pedido sin cliente se ha omitido. Esto se debe a que hemos utilizado un RIGHT OUTER JOIN; se han incluido todos los registros de la tabla derecha (customers) se han incluido.

FULL OUTER JOIN

¿Pero qué pasa si quiere todas las filas de ambas tablas? Utilice FULL OUTER JOIN. Este JOIN devuelve todas las filas de ambas tablas, sustituyendo por NULL cualquier valor de fila que no esté presente en la otra tabla.

Consulta:

SELECT 
  a.Order_Number, 
  b.Customer_Name, 
  b.Postal_Code 
FROM orders a 
FULL JOIN customers b --alternatively use ‘FULL OUTER JOIN’ instead of ‘FULL JOIN’
ON a.Customer_Number = b.Customer_Number;

Resultado:

Los resultados incluyen tanto el cliente La Roche (que no tiene pedidos) como el pedido 11211 (que no tiene información sobre el cliente).

Diferencia entre INNER y OUTER JOIN

Como se habrá dado cuenta, la diferencia clave entre INNER JOIN y OUTER JOIN es si se incluyen las filas para las que no tenemos una coincidencia en la otra tabla. Mientras que un INNER JOIN sólo devuelve las filas en las que hay una coincidencia entre las dos tablas, un OUTER JOIN (dependiendo del tipo) también devuelve aquellas filas para las que no hay ninguna coincidencia en la otra tabla.

¿Está preparado para utilizar OUTER JOIN en sus consultas?

Espero que este artículo le haya dado una buena idea de cómo utilizar OUTER JOIN. Si quieres profundizar en el uso de SQL JOINs, consulta el Tipos de JOIN en SQL curso que mencioné antes. Si estás empezando tu viaje de aprendizaje de SQL, te recomendaría el Curso completo de SQL pista. Contiene 7 cursos de SQL que te llevan desde el SQL básico hasta el avanzado. Es genial para desarrollar una base sólida en este lenguaje.

En cualquier caso, como en cualquier otro campo, el aprendizaje continuo es la clave del éxito. Así que, ¡todo lo mejor y feliz aprendizaje!