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ícateSintaxis 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:
- El primer SELECT obtiene todos los departamentos y sus empleados (incluyendo departamentos sin empleados)
- El segundo SELECT obtiene los empleados sin departamento
- 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.
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
Inserción de datos: INSERT INTO
Filtrado de grupos de resultados con HAVING
Uso de índices y particiones
Renombrar tablas y bases de datos: RENAME
Uso de vistas
Uso de INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN
Agrupación de resultados con GROUP BY
Creación y uso de subqueries
Sentencias INSERT
Copias de seguridad y restauración de bases de datos
Uso de INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN
Instalación de MySQL
Relaciones entre tablas
Eliminación de datos: DELETE
Creación de bases de datos y tablas: CREATE DATABASE, CREATE TABLE
Creación y uso de funciones
Creación de tablas e inserción de datos con SQL
Uso de funciones agregadas: COUNT, SUM, AVG, MAX, MIN
Optimización de consultas
Introducción a SQL
Triggers y eventos
Clasificación de resultados con ORDER BY
Alterar la estructura de tablas existentes: ALTER TABLE
Eliminación de datos: DELETE
Instalación de PostgreSQL
Creación y uso de procedimientos almacenados
Consultas básicas de selección: SELECT y WHERE
Vaciar tablas y bases de datos: DROP
Actualización de datos: UPDATE
Creación y manejo de usuarios y roles
Consultas básicas de selección SELECT y WHERE
Creación de bases de datos y tablas
Bases de datos y tablas
Actualización de datos: UPDATE
Relaciones entre tablas
Filtrado de valores únicos con DISTINCT
Asignación y gestión de permisos
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
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.