Relaciones · unión externa completa

FULL OUTER JOIN

Reúne coincidencias y conserva también las filas sin pareja de los dos conjuntos.

Lectura: 5–7 minEjemplo comprobadoCompatibilidad por motor
Contenido de esta guía

Qué conserva FULL OUTER JOIN

FULL OUTER JOIN devuelve las filas que coinciden y, además, las filas sin pareja de la izquierda y de la derecha. En cada ausencia, las columnas del lado que falta se rellenan con NULL.

Resulta útil para conciliaciones: comparar inventarios, listas esperadas frente a actividad real o registros de dos sistemas que deberían estar sincronizados.

Sintaxis básica

Forma general
SELECT columnas
FROM conjunto_a AS a
FULL OUTER JOIN conjunto_b AS b
  ON b.clave = a.clave;

FULL JOIN y FULL OUTER JOIN son formas equivalentes en los motores que admiten este operador.

Ejemplo guiado

Lista esperada frente a actividad
WITH esperados(id, nombre) AS (
  VALUES (1, 'Ana'), (6, 'Pablo'), (9, 'Nora')
), actividad(cliente_id, ultima_fecha) AS (
  VALUES (1, '2025-05-10'),
         (7, '2025-05-23'),
         (9, '2025-06-01')
)
SELECT e.id AS esperado_id,
       e.nombre,
       a.cliente_id,
       a.ultima_fecha
FROM esperados AS e
FULL OUTER JOIN actividad AS a
  ON a.cliente_id = e.id
ORDER BY COALESCE(e.id, a.cliente_id);
Resultado comprobado en SQLite 3.46
esperado_idnombrecliente_idultima_fecha
1Ana12025-05-10
6PabloNULLNULL
NULLNULL72025-05-23
9Nora92025-06-01

Ana y Nora coinciden. Pablo solo está en la lista esperada; el identificador 7 solo aparece en la actividad. El resultado permite ver las tres situaciones en una consulta.

Error frecuente

Filtrar después y borrar una de las ausencias

Una condición como WHERE a.ultima_fecha >= '2025-06-01' elimina las filas cuyo lado derecho es NULL. Si necesitas conservarlas, expresa la regla con cuidado, por ejemplo incluyendo OR a.ultima_fecha IS NULL, o filtra antes de unir.

Comprueba lo aprendido

Intermedia · conciliación

Clasifica cada fila

Añade una columna situacion que indique 'coincide', 'solo_esperados' o 'solo_actividad'.

Compatibilidad entre motores

PostgreSQL, SQL Server y SQLite desde 3.39.0 admiten FULL OUTER JOIN. La documentación de MySQL 8.4 describe uniones externas LEFT y RIGHT, pero no un operador FULL; allí suele construirse un resultado equivalente combinando consultas, y debe probarse con especial cuidado para no duplicar coincidencias.

Qué debes recordar

  • Conserva filas coincidentes y no coincidentes de ambos lados.
  • Los NULL muestran qué conjunto no aportó pareja.
  • Es útil para conciliaciones y detección de diferencias.
  • La compatibilidad directa no es igual en todos los motores.

Conceptos relacionados

Fuentes técnicas consultadas