SQL

Tutorial SQL: FULL JOIN

Aprende a usar full join en SQL para combinar tablas con todos los registros, incluyendo ejemplos en PostgreSQL y emulación en MySQL.

Aprende SQL y certifícate

Sintaxis FULL JOIN

El FULL JOIN (también conocido como FULL OUTER JOIN) es un tipo de unión que combina los resultados de dos tablas, incluyendo todas las filas de ambas tablas, independientemente de si existe una coincidencia en la otra tabla. Cuando no hay coincidencia, las columnas de la tabla sin datos correspondientes se rellenan con valores NULL.

La sintaxis básica del FULL JOIN es la siguiente:

SELECT columnas
FROM tabla1
FULL JOIN tabla2
ON tabla1.columna = tabla2.columna;

Esta operación es especialmente útil cuando necesitamos ver todos los registros de ambas tablas, incluyendo aquellos que no tienen correspondencia. Visualmente, un FULL JOIN representa la unión completa de dos conjuntos de datos.

Implementación en PostgreSQL

PostgreSQL soporta nativamente la sintaxis FULL JOIN. Veamos un ejemplo práctico:

Supongamos que tenemos dos tablas: departamentos y empleados.

-- Ejemplo en PostgreSQL
SELECT d.nombre_departamento, e.nombre_empleado
FROM departamentos d
FULL JOIN empleados e
ON d.id_departamento = e.id_departamento
ORDER BY d.nombre_departamento, e.nombre_empleado;

Este código mostrará todos los departamentos (incluso los que no tienen empleados) y todos los empleados (incluso aquellos sin departamento asignado). Cuando un departamento no tiene empleados o un empleado no tiene departamento, veremos valores NULL en las columnas correspondientes.

Emulación en MySQL

MySQL no soporta directamente la sintaxis FULL JOIN, pero podemos emularlo combinando LEFT JOIN y RIGHT JOIN con la operación UNION:

-- Emulación de FULL JOIN en MySQL
SELECT d.nombre_departamento, e.nombre_empleado
FROM departamentos d
LEFT JOIN empleados e
ON d.id_departamento = e.id_departamento

UNION

SELECT d.nombre_departamento, e.nombre_empleado
FROM departamentos d
RIGHT JOIN empleados e
ON d.id_departamento = e.id_departamento
WHERE d.id_departamento IS NULL;

En esta emulación:

  1. El primer SELECT obtiene todos los departamentos y sus empleados (incluyendo departamentos sin empleados)
  2. El segundo SELECT obtiene los empleados sin departamento
  3. La operación UNION combina ambos resultados, eliminando duplicados

Casos de uso prácticos

El FULL JOIN es particularmente útil en escenarios como:

  • Análisis de integridad de datos: Identificar registros huérfanos o sin correspondencia entre tablas relacionadas.
-- Encontrar departamentos sin empleados y empleados sin departamento
SELECT d.id_departamento, e.id_empleado
FROM departamentos d
FULL JOIN empleados e
ON d.id_departamento = e.id_departamento
WHERE d.id_departamento IS NULL OR e.id_departamento IS NULL;
  • Reportes completos: Generar informes que requieren todos los datos, independientemente de las relaciones.
-- Reporte completo de productos y ventas (incluyendo productos no vendidos)
SELECT p.nombre_producto, v.fecha_venta, v.cantidad
FROM productos p
FULL JOIN ventas v
ON p.id_producto = v.id_producto
ORDER BY p.nombre_producto, v.fecha_venta;

Consideraciones importantes

Al trabajar con FULL JOIN, es importante tener en cuenta:

  • El rendimiento puede verse afectado en tablas muy grandes, ya que se procesan todos los registros de ambas tablas.
  • Los valores NULL requieren un tratamiento especial en las condiciones WHERE si queremos filtrar correctamente.
  • En MySQL, la emulación mediante UNION puede ser menos eficiente que un FULL JOIN nativo.
-- Uso de COALESCE para manejar valores NULL en un FULL JOIN
SELECT 
    COALESCE(d.nombre_departamento, 'Sin departamento') AS departamento,
    COALESCE(e.nombre_empleado, 'Sin empleados') AS empleado
FROM departamentos d
FULL JOIN empleados e
ON d.id_departamento = e.id_departamento;

Este ejemplo utiliza la función COALESCE para reemplazar los valores NULL con textos descriptivos, mejorando la legibilidad de los resultados.

Diferencias con otros tipos de JOIN

A diferencia de INNER JOIN (que solo muestra coincidencias) y LEFT/RIGHT JOIN (que priorizan una tabla), el FULL JOIN es inclusivo con ambas tablas:

-- Comparación de resultados entre diferentes tipos de JOIN
-- INNER JOIN (solo coincidencias)
SELECT 'INNER' AS tipo_join, d.nombre_departamento, e.nombre_empleado
FROM departamentos d
INNER JOIN empleados e ON d.id_departamento = e.id_departamento

UNION ALL

-- FULL JOIN (todas las filas de ambas tablas)
SELECT 'FULL' AS tipo_join, d.nombre_departamento, e.nombre_empleado
FROM departamentos d
FULL JOIN empleados e ON d.id_departamento = e.id_departamento
WHERE d.id_departamento IS NULL OR e.id_departamento IS NULL;

Este ejemplo muestra claramente la diferencia: el INNER JOIN solo muestra las coincidencias, mientras que el FULL JOIN también incluye las filas sin correspondencia.

Aprende SQL online

Otros ejercicios de programación de SQL

Evalúa tus conocimientos de esta lección FULL JOIN con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Tipos de datos

Test

Inserción de datos: INSERT INTO

Test

Filtrado de grupos de resultados con HAVING

Test

Uso de índices y particiones

Test

Renombrar tablas y bases de datos: RENAME

Test

Uso de vistas

Test

Uso de INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN

Test

Agrupación de resultados con GROUP BY

Test

Creación y uso de subqueries

Test

Sentencias INSERT

Código

Copias de seguridad y restauración de bases de datos

Test

Uso de INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN

Código

Instalación de MySQL

Test

Relaciones entre tablas

Código

Eliminación de datos: DELETE

Test

Creación de bases de datos y tablas: CREATE DATABASE, CREATE TABLE

Test

Creación y uso de funciones

Test

Creación de tablas e inserción de datos con SQL

Proyecto

Uso de funciones agregadas: COUNT, SUM, AVG, MAX, MIN

Test

Optimización de consultas

Test

Introducción a SQL

Test

Triggers y eventos

Test

Clasificación de resultados con ORDER BY

Test

Alterar la estructura de tablas existentes: ALTER TABLE

Test

Eliminación de datos: DELETE

Código

Instalación de PostgreSQL

Test

Creación y uso de procedimientos almacenados

Test

Consultas básicas de selección: SELECT y WHERE

Test

Vaciar tablas y bases de datos: DROP

Test

Actualización de datos: UPDATE

Test

Creación y manejo de usuarios y roles

Test

Consultas básicas de selección SELECT y WHERE

Código

Creación de bases de datos y tablas

Código

Bases de datos y tablas

Test

Actualización de datos: UPDATE

Código

Relaciones entre tablas

Test

Filtrado de valores únicos con DISTINCT

Test

Asignación y gestión de permisos

Test

Todas las lecciones de SQL

Accede a todas las lecciones de SQL y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Introducción A Sql

Introducción Y Entorno

Ddl Y Dml

Introducción Y Entorno

Instalación De Mysql

Introducción Y Entorno

Instalación De Postgresql

Introducción Y Entorno

Tipos De Datos

Introducción Y Entorno

Bases De Datos Y Tablas

Introducción Y Entorno

Sistemas De Gestión De Bases De Datos

Introducción Y Entorno

Tipos De Bases De Datos

Introducción Y Entorno

Creación De Bases De Datos Y Tablas: Create Database, Create Table

Sintaxis Dml Crud

Consultas Básicas De Selección: Select Y Where

Sintaxis Dml Crud

Inserción De Datos: Insert Into

Sintaxis Dml Crud

Actualización De Datos: Update

Sintaxis Dml Crud

Eliminación De Datos: Delete

Sintaxis Dml Crud

Introducción A Dml

Sintaxis Dml Crud

Consultar Datos: Select

Sintaxis Dml Crud

Clasificación De Resultados Con Order By

Filtros Y Clasificación

Filtrado De Valores Únicos Con Distinct

Filtros Y Clasificación

Paginación Con Limit Y Offset

Filtros Y Clasificación

Alterar La Estructura De Tablas Existentes: Alter Table

Sintaxis Ddl

Renombrar Tablas Y Bases De Datos: Rename

Sintaxis Ddl

Vaciar Tablas Y Bases De Datos: Drop

Sintaxis Ddl

Uso De Funciones Agregadas: Count, Sum, Avg, Max, Min

Funciones Y Agrupación

Agrupación De Resultados Con Group By

Funciones Y Agrupación

Filtrado De Grupos De Resultados Con Having

Funciones Y Agrupación

Funciones Numéricas Y Matemáticas

Funciones Y Agrupación

Funciones De Fecha Y Hora

Funciones Y Agrupación

Funciones De Texto

Funciones Y Agrupación

Many To One

Asociaciones Entre Tablas

One To Many

Asociaciones Entre Tablas

One To One

Asociaciones Entre Tablas

Many To Many

Asociaciones Entre Tablas

Relaciones Entre Tablas

Joins Y Subqueries

Uso De Inner Join, Left Join, Right Join, Full Join

Joins Y Subqueries

Creación Y Uso De Subqueries

Joins Y Subqueries

Left Join Y Right Join

Joins Y Subqueries

Full Join

Joins Y Subqueries

Cross Join Y Self Join

Joins Y Subqueries

Optimización De Consultas

Sintaxis Avanzada

Uso De Índices Y Particiones

Sintaxis Avanzada

Uso De Vistas

Sintaxis Avanzada

Triggers Y Eventos

Sintaxis Avanzada

Particiones

Sintaxis Avanzada

Restricciones E Integridad

Sintaxis Avanzada

Transacciones

Sintaxis Avanzada

Vistas Materializadas

Sintaxis Avanzada

Rollback

Sintaxis Avanzada

Vistas Con Create View

Sintaxis Avanzada

Principios Acid

Sintaxis Avanzada

Manejo De Errores Y Excepciones

Sintaxis Avanzada

Funciones Ventana

Sintaxis Avanzada

Índices

Sintaxis Avanzada

Expresiones De Tabla Comunes (Cte) Con With

Sintaxis Avanzada

Creación Y Uso De Funciones

Programación En Sql

Creación Y Uso De Procedimientos Almacenados

Programación En Sql

Variables Y Control De Flujo

Programación En Sql

Creación Y Manejo De Usuarios Y Roles

Seguridad Y Administración

Asignación Y Gestión De Permisos

Seguridad Y Administración

Copias De Seguridad Y Restauración De Bases De Datos

Seguridad Y Administración

Accede GRATIS a SQL y certifícate

En esta lección

Objetivos de aprendizaje de esta lección

  • Comprender la sintaxis y funcionamiento del FULL JOIN en SQL.
  • Aprender a utilizar FULL JOIN en PostgreSQL para combinar tablas incluyendo filas sin coincidencias.
  • Saber cómo emular un FULL JOIN en MySQL mediante la combinación de LEFT JOIN y RIGHT JOIN con UNION.
  • Identificar casos prácticos donde el FULL JOIN es útil, como análisis de integridad y reportes completos.
  • Reconocer las diferencias entre FULL JOIN y otros tipos de JOIN como INNER JOIN y LEFT/RIGHT JOIN.