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

Guía ilustrada del OUTER JOIN de SQL

Ya hemos hablado del SQL CROSS JOIN y INNER JOIN y las sentencias OUTER JOIN. Es hora de explorar otro: OUTER JOIN. ¿Qué es? ¿Cómo funciona? Averigüémoslo.

Si has leído nuestros otros posts, sabrás que puedes enlazar los datos de dos o más tablas de la base de datos utilizando uno de los muchos tipos de operadores de unión de SQL. Hoy, discutiremos los tres tipos de OUTER JOIN: LEFT OUTER JOIN, RIGHT OUTER JOIN, y FULL OUTER JOIN. Estos operadores unen los registros basándose en la coincidencia de los valores de las filas, pero lo hacen de forma un poco diferente a otras sentencias de unión.

¿Qué es un OUTER JOIN de SQL?

Para responder a esta pregunta, tenemos que profundizar en los diferentes tipos de OUTER JOIN:

  • LEFT OUTER JOIN devuelve cada registro de la tabla izquierda y todos los registros coincidentes de la tabla derecha. Si no se encuentra ninguna coincidencia, se muestra un NULL junto al registro no coincidente.
  • RIGHT OUTER JOIN devuelve todos los registros de la tabla derecha y todos los registros coincidentes de la tabla izquierda. Si no se encuentra ninguna coincidencia, se muestra un NULL junto al registro no coincidente.
  • FULL OUTER JOIN devuelve todos los registros de ambas tablas. Todos los registros no coincidentes se emparejan con NULL.

Veamos ahora las tablas que utilizaremos para ilustrar estos operadores.

La tabla "shirt" sólo tiene un campo, "color_shirt":

color_shirt
yellow
green
blue

La tabla "pants" también tiene un campo, "color_pants":

color_pants
pink
green
blue

Estas tablas se explican por sí mismas. Imagínelas como dos partes de un conjunto: el color de los pantalones y el color de la camisa. La idea es encontrar camisas y pantalones con colores idénticos.

Es bueno saberlo: La tabla de la izquierda es la primera tabla de la lista y se encuentra después de la cláusula FROM. La tabla de la derecha es la segunda tabla de la lista y se encuentra después de la cláusula JOIN. Normalmente puede omitir la palabra clave OUTER en cualquier OUTER JOIN - FULL JOIN, LEFT JOIN, y RIGHT JOIN funcionarán igual de bien en muchas bases de datos (pero compruebe su documentación para estar seguro).

Uso de un LEFT OUTER JOIN

LEFT OUTER JOIN recupera todos los registros de la primera tabla (izquierda) y los hace coincidir con los registros de la segunda tabla (derecha). Los registros no coincidentes de la tabla izquierda también se seleccionan, pero con valores NULL donde estarían los registros de la tabla derecha.

Observe el ejemplo.

SELECT color_shirt, color_pants 
FROM shirt
LEFT JOIN pants ON color_shirt=color_pants;

La tabla de la izquierda (después de FROM) es "shirt" y la tabla de la derecha (después de LEFT JOIN) es "pants". El predicado ON establece la condición para hacer coincidir los registros de "shirt" con los registros de "pants". Esta condición es que los valores del campo "shirt"."color_shirt" y los del campo "pants"."color_pants" deben coincidir. Si no hay coincidencia, se mostrarán los registros de la tabla "shirt", pero en el lugar donde estaría el registro "pants" coincidente.

Estos son los resultados de esta consulta:

color_shirt color_pants
yellow NULL
green green
blue blue

Y aquí hay una ilustración de cómo funciona esta consulta y cómo son los resultados:

unión a la izquierda

Como ve, los conjuntos verde y azul coincidentes están juntos. La camisa amarilla no tiene pantalones porque la tabla "pants" no tiene ningún campo con valor "amarillo".

Utilizando un RIGHT OUTER JOIN

El RIGHT OUTER JOIN funciona como el LEFT JOIN, pero con una diferencia importante: selecciona todos los registros de la tabla correcta (en este caso, "pants"). Los registros de la tabla izquierda ("shirt") sólo se mostrarán si coinciden.

Mire la consulta:

SELECT color_shirt, color_pants 
FROM shirt	
RIGHT JOIN pants ON color_shirt=color_pants;

Este es el resultado:

color_shirt color_pants
NULL pink
green green
blue blue

Y aquí está la ilustración del uso de RIGHT JOIN y sus resultados. Se muestran todos los pantalones, pero no hay ninguna camisa que coincida con el par de pantalones rosas.

unión a la derecha

Uso de un FULL OUTER JOIN

Recapitulemos lo que hemos hecho hasta ahora. Con LEFT JOIN, se devuelven todas las camisas y cualquier pantalón que coincida. Con RIGHT JOIN, se devuelven todos los pantalones y las camisas que coincidan. ¿Qué ocurrirá si se utiliza FULL OUTER JOIN? Se mostrarán todos los registros de ambas tablas. Si es posible, coincidirán los registros; si no, se mostrará un NULL donde estaría el registro coincidente.

Veamos un ejemplo de consulta:

SELECT color_shirt, color_pants 
FROM shirt
FULL  JOIN pants ON color_shirt=color_pants;

Observe que en un FULL JOIN qué tabla es la izquierda y cuál es la derecha es insignificante. El resultado será el mismo.

Aquí está el resultado:

color_shirt color_pants
yellow NULL
green green
blue blue
NULL pink

El conjunto de resultados contiene todos los registros almacenados en la tabla "shirt" y en la tabla "pants".

full join

La imagen muestra que FULL JOIN devolvió todas las prendas posibles: todas las camisas y todos los pantalones. Los pares coincidentes (verde y azul) se muestran juntos, y las prendas no coincidentes (camisa amarilla y pantalón rosa) se muestran por separado.

¿Quiere saber más sobre los OUTER JOINs?

Hay más cosas que descubrir sobre el uso de OUTER JOINs. Para aprender más, consulte el curso LearnSQL.es's SQL para principiantes.