🙏 Realmente necesitamos su apoyo. Necesitamos financiamiento para continuar nuestra misión: publicar nuevas lecciones y mejorar la plataforma. Si puede, por favor apoye el proyecto con una donación. Ayude al proyecto ahora →
Código SQL copiado al portapapeles

Lección 5.5: FULL OUTER JOIN - Combinando Todo de Ambas Tablas

El FULL OUTER JOIN es el tipo de unión más inclusivo. Devuelve todas las filas cuando hay una coincidencia en cualquiera de las tablas, ya sea la izquierda o la derecha. Es esencialmente una combinación de un LEFT JOIN y un RIGHT JOIN.

¿Qué es un FULL OUTER JOIN?

Un FULL OUTER JOIN crea un conjunto de resultados que incluye todos los registros de ambas tablas.

  • Si una fila coincide, las columnas de ambas tablas se completan.
  • Si hay una fila en la tabla izquierda sin coincidencia en la derecha, las columnas de la derecha son NULL.
  • Si hay una fila en la tabla derecha sin coincidencia en la izquierda, las columnas de la izquierda son NULL.

Visualización:

   Tabla A (potential_leads)    Tabla B (active_clients)
   +----+----------+            +----+----------+
   | id | nombre   |            | id | estado   |
   +----+----------+            +----+----------+
   | 1  | Alice    | <--------> | 1  | Activo   | (¡Coincidencia!)
   | 2  | Bob      | <--------? | NULL          | (Solo lead, aún sin cuenta)
   | NULL          | <--------> | 3  | Activo   | (Cliente solo, no en la lista de leads)
   +----+----------+            +----+----------+

Sintaxis de FULL OUTER JOIN

SELECT
    table1.column1,
    table2.column2
FROM
    table1
FULL OUTER JOIN
    table2 ON table1.common_column = table2.common_column;

Nota Importante sobre el Soporte de Bases de Datos: No todos los sistemas de bases de datos soportan FULL OUTER JOIN de manera nativa.

  • PostgreSQL, SQL Server y Oracle lo soportan.
  • MySQL y MariaDB NO lo soportan.

Solución Alternativa para MySQL/MariaDB

Dado que MySQL no tiene FULL OUTER JOIN, los desarrolladores logran el mismo resultado combinando un LEFT JOIN y un RIGHT JOIN usando el operador UNION:

SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id
UNION
SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.id;

Ejemplo Práctico

Imagina que estamos fusionando datos de dos sucursales diferentes. La Sucursal A tiene su propia lista de clientes, y la Sucursal B tiene la suya. Queremos una lista completa de todos los clientes en ambas sucursales, mostrando dónde se superponen.

SELECT
    a.customer_name AS branch_a_name,
    b.customer_name AS branch_b_name
FROM
    branch_a_customers AS a
FULL OUTER JOIN
    branch_b_customers AS b ON a.customer_id = b.customer_id;

Puntos Clave de Esta Lección

  • FULL OUTER JOIN devuelve todos los registros de ambas tablas.
  • Utiliza NULLs para llenar los espacios donde no se encuentra coincidencia en ninguno de los lados.
  • Es la mejor herramienta para la sincronización de bases de datos y para encontrar discrepancias entre dos listas.
  • Si tu base de datos no lo soporta (como MySQL), utiliza un UNION de un LEFT y un RIGHT join.