El FULL OUTER JOIN combina datos de dos tablas y devuelve todas las filas de ambas tablas, incluidas las filas coincidentes y no coincidentes de ambos lados.
En otras palabras, el FULL OUTER JOIN combina los resultados del left join y del right join.
Esta es la sintaxis básica de la cláusula FULL OUTER JOIN:
SELECT select_list
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name;
En esta sintaxis:
- Primero, especifique las columnas de
table1ytable2en laselect_list. - En segundo lugar, especifique la
table1que desea recuperar los datos en la cláusulaFROM. - En tercer lugar, especifique la
table2que desea unir con latable1en la cláusulaFULL OUTER JOIN. - Por último, defina una condición para unir dos tablas.
El FULL OUTER JOIN también se conoce como FULL JOIN. La palabra clave OUTER es opcional.
Cómo funciona el FULL OUTER JOIN¶
Paso 1. Inicializar el conjunto de resultados:¶
- El
FULL OUTER JOINcomienza con un resultado vacío.
Paso 2. Coincidencia de filas:¶
- En primer lugar, identifique las filas de la
tabla1y latabla2en las que coincidan los valores delnombre_columnaespecificado. - A continuación, incluya estas filas coincidentes en el conjunto de resultados.
Paso 3. Incluir filas no coincidentes de la tabla1 y la tabla2:¶
- En primer lugar, incluya las filas de la
tabla1que no coincidan con las de latabla2. Para las columnas de latabla2en estas filas, incluya NULLs. - En segundo lugar, incluya las filas de la
tabla2que no coincidan con las de latabla1. Para las columnas de latabla1en estas filas, incluya NULLs.
Paso 4. Devolver el conjunto de resultados:¶
- Devuelve el conjunto de resultados final que contendrá todas las filas de ambas tablas, con filas coincidentes y no coincidentes tanto de
table1como detable2. - Si una fila tiene una coincidencia en ambos lados, combina los valores en una sola fila.
- Si no hay ninguna coincidencia en uno de los lados, las columnas del lado no coincidente tendrán valores NULL.
El siguiente diagrama de Venn ilustra la operación FULL OUTER JOIN.

Configurar tablas de ejemplo¶
Primero, cree dos nuevas tablas para la demostración: employees y departments:
CREATE TABLE departments (
department_id serial PRIMARY KEY,
department_name VARCHAR (255) NOT NULL
);
CREATE TABLE employees (
employee_id serial PRIMARY KEY,
employee_name VARCHAR (255),
department_id INTEGER
);
Cada departamento tiene cero o muchos empleados y cada empleado pertenece a cero o un departamento.
En segundo lugar, inserte algunos datos de ejemplo en las tablas departments y employees.
INSERT INTO departments (department_name)
VALUES
('Sales'),
('Marketing'),
('HR'),
('IT'),
('Production');
INSERT INTO employees (employee_name, department_id)
VALUES
('Bette Nicholson', 1),
('Christian Gable', 1),
('Joe Swank', 2),
('Fred Costner', 3),
('Sandra Kilmer', 4),
('Julia Mcqueen', NULL);
En tercer lugar, consulta los datos de las tablas departments y employees:
SELECT * FROM departments;
Salida:
department_id | department_name
---------------+-----------------
1 | Sales
2 | Marketing
3 | HR
4 | IT
5 | Production
(5 rows)
SELECT * FROM employees;
Salida:
employee_id | employee_name | department_id
-------------+-----------------+---------------
1 | Bette Nicholson | 1
2 | Christian Gable | 1
3 | Joe Swank | 2
4 | Fred Costner | 3
5 | Sandra Kilmer | 4
6 | Julia Mcqueen | null
(6 rows)
Ejemplos de FULL OUTER JOIN en PostgreSQL¶
Veamos algunos ejemplos del uso de la cláusula FULL OUTER JOIN.
Ejemplo básico de FULL OUTER JOIN¶
La siguiente consulta utiliza la cláusula FULL OUTER JOIN para consultar datos de las tablas employees y departments:
SELECT
employee_name,
department_name
FROM
employees e
FULL OUTER JOIN departments d
ON d.department_id = e.department_id;
Salida:
employee_name | department_name
-----------------+-----------------
Bette Nicholson | Sales
Christian Gable | Sales
Joe Swank | Marketing
Fred Costner | HR
Sandra Kilmer | IT
Julia Mcqueen | null
null | Production
(7 rows)
El conjunto de resultados incluye todos los empleados que pertenecen a un departamento y todos los departamentos que tienen un empleado.
Además, incluye todos los empleados que no pertenecen a ningún departamento y todos los departamentos que no tienen empleados.
Ejemplo de utilización de FULL OUTER JOIN con cláusula WHERE¶
El siguiente ejemplo utiliza FULL OUTER JOIN con una cláusula WHERE para encontrar el departamento que no tiene ningún empleado:
SELECT
employee_name,
department_name
FROM
employees e
FULL OUTER JOIN departments d
ON d.department_id = e.department_id
WHERE
employee_name IS NULL;
Salida:
employee_name | department_name
---------------+-----------------
null | Production
(1 row)
El resultado muestra que el departamento Production no tiene ningún empleado.
El siguiente ejemplo utiliza el cluase FULL OUTER JOIN con una cláusula WHERE para encontrar empleados que no pertenezcan a ningún departamento:
SELECT
employee_name,
department_name
FROM
employees e
FULL OUTER JOIN departments d
ON d.department_id = e.department_id
WHERE
department_name IS NULL;
Salida:
employee_name | department_name
---------------+-----------------
Julia Mcqueen | null
(1 row)
La salida muestra que Juila Mcqueen no pertenece a ningún departamento.
Resumen¶
- Utilice la cláusula
FULL OUTER JOINde PostgreSQL para combinar datos de ambas tablas, asegurándose de que se incluyen las filas coincidentes tanto de la tabla izquierda como de la derecha, así como las filas no coincidentes de cualquiera de las tablas.