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.
¿Te está gustando esta lección?
Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.
Más de 25.000 desarrolladores ya confían en CertiDevs
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.
Aprendizajes 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.
Completa SQL y certifícate
Únete a nuestra plataforma y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.
Asistente IA
Resuelve dudas al instante
Ejercicios
Practica con proyectos reales
Certificados
Valida tus conocimientos
Más de 25.000 desarrolladores ya se han certificado con CertiDevs