OUTER JOIN en SQL: qué es, cómo funciona y ejemplos prácticos

La cláusula OUTER JOIN en SQL se utiliza para combinar filas de dos tablas, devolviendo todas las coincidencias y, además, las filas que no tienen correspondencia en una de las tablas.

👉 Es diferente de INNER JOIN, que solo devuelve las coincidencias.
👉 Con OUTER JOIN podemos obtener datos incluso cuando faltan correspondencias, rellenando los valores con NULL.

Tipos de OUTER JOIN

Existen tres variantes principales:

  1. LEFT OUTER JOIN
    Devuelve todas las filas de la tabla izquierda y las coincidentes de la derecha.
    Si no hay coincidencia, completa con NULL.
  2. RIGHT OUTER JOIN
    Devuelve todas las filas de la tabla derecha y las coincidentes de la izquierda.
  3. FULL OUTER JOIN
    Devuelve todas las filas de ambas tablas, coincidan o no.

En la práctica, muchos motores permiten usar simplemente LEFT JOIN, RIGHT JOIN o FULL JOIN, omitiendo la palabra OUTER.

Sintaxis básica de OUTER JOIN

SELECT columnas
FROM tabla1
LEFT | RIGHT | FULL OUTER JOIN tabla2
ON tabla1.columna = tabla2.columna;

Ejemplo de LEFT OUTER JOIN

Tablas:

clientes

idnombre
1Ana
2Luis
3Carla

pedidos

idcliente_idtotal
11100
22200

Consulta:

SELECT c.id, c.nombre, p.total
FROM clientes c
LEFT OUTER JOIN pedidos p
ON c.id = p.cliente_id;

Resultado:

idnombretotal
1Ana100
2Luis200
3CarlaNULL

👉 Carla aparece aunque no tenga pedidos.

Ejemplo de RIGHT OUTER JOIN

SELECT c.id, c.nombre, p.total
FROM clientes c
RIGHT OUTER JOIN pedidos p
ON c.id = p.cliente_id;

Resultado:

idnombretotal
1Ana100
2Luis200

👉 Muestra todos los pedidos, aunque el cliente no esté en la tabla clientes (si existiera ese caso).

Ejemplo de FULL OUTER JOIN

SELECT c.id, c.nombre, p.total
FROM clientes c
FULL OUTER JOIN pedidos p
ON c.id = p.cliente_id;

Resultado:

idnombretotal
1Ana100
2Luis200
3CarlaNULL

👉 Combina los dos anteriores: muestra todos los clientes y todos los pedidos.

OUTER JOIN vs INNER JOIN

  • INNER JOIN: solo devuelve coincidencias.
  • OUTER JOIN: devuelve coincidencias y filas sin correspondencia (con NULL).

Si quieres repasar la sintaxis general, mira el artículo sobre JOIN en SQL.

Ejemplo comparativo:

-- INNER JOIN
SELECT c.nombre, p.total
FROM clientes c
INNER JOIN pedidos p ON c.id = p.cliente_id;

-- LEFT JOIN
SELECT c.nombre, p.total
FROM clientes c
LEFT JOIN pedidos p ON c.id = p.cliente_id;

👉 El primero no devuelve clientes sin pedidos, el segundo sí.

OUTER JOIN con múltiples tablas

Podemos encadenar varios OUTER JOIN en combinación con condiciones adicionales en el WHERE.

SELECT c.nombre, p.total, f.metodo_pago
FROM clientes c
LEFT JOIN pedidos p ON c.id = p.cliente_id
LEFT JOIN facturas f ON p.id = f.pedido_id;

👉 Devuelve clientes, sus pedidos y facturas (si existen).

OUTER JOIN y condiciones adicionales

Podemos filtrar resultados después del JOIN:

SELECT c.nombre, p.total
FROM clientes c
LEFT JOIN pedidos p ON c.id = p.cliente_id
WHERE p.total > 150;

⚠️ Ojo: este filtro elimina los NULL, por lo que ya no se verán clientes sin pedidos.
Para conservarlos, conviene mover la condición al ON:

SELECT c.nombre, p.total
FROM clientes c
LEFT JOIN pedidos p
ON c.id = p.cliente_id AND p.total > 150;

Rendimiento de OUTER JOIN

  • LEFT JOIN suele ser más eficiente que FULL OUTER JOIN.
  • Para grandes tablas, conviene tener índices en las columnas de unión.
  • FULL OUTER JOIN no está disponible en MySQL; se simula con UNION.

Ejemplo en MySQL:

SELECT c.id, c.nombre, p.total
FROM clientes c
LEFT JOIN pedidos p ON c.id = p.cliente_id
UNION
SELECT c.id, c.nombre, p.total
FROM clientes c
RIGHT JOIN pedidos p ON c.id = p.cliente_id;

Errores comunes con OUTER JOIN

  1. Olvidar el ON
    👉 Sin condición, se genera un producto cartesiano (todas las combinaciones posibles).
  2. Confundir filtros en WHERE vs ON
    👉 Si se filtra en WHERE, los NULL desaparecen.
  3. Esperar que todos los motores soporten FULL OUTER JOIN
    👉 MySQL no lo soporta.
  4. Duplicados inesperados
    👉 Si la condición de unión no es única, puede devolver más filas de las esperadas.

Buenas prácticas con OUTER JOIN

  • Usar LEFT JOIN cuando la tabla izquierda sea la principal.
  • Filtrar condiciones de coincidencia dentro de ON para no eliminar filas con NULL.
  • Evitar FULL OUTER JOIN salvo que sea realmente necesario.
  • Siempre indexar las columnas que se usan en el ON.
  • Documentar claramente por qué se usa un OUTER JOIN (evita confusiones con INNER JOIN).

Preguntas frecuentes (FAQ)

1. ¿Qué diferencia hay entre LEFT JOIN y RIGHT JOIN?
La tabla “principal” cambia: LEFT asegura todas las filas de la izquierda, RIGHT todas las de la derecha.

2. ¿FULL OUTER JOIN está disponible en MySQL?
No. Debe simularse con UNION.

3. ¿Se pueden combinar INNER y OUTER JOIN en la misma consulta?
Sí, se pueden mezclar según lo que se necesite.

4. ¿OUTER JOIN afecta el rendimiento?
Sí, más que un INNER JOIN, ya que debe procesar filas no coincidentes.

5. ¿Los OUTER JOIN son parte del estándar SQL?
Sí, están incluidos en SQL estándar, aunque su implementación varía según el motor.

Conclusión

El OUTER JOIN en SQL es indispensable cuando queremos conservar filas sin coincidencia entre dos tablas.

  • LEFT OUTER JOIN: asegura las filas de la izquierda.
  • RIGHT OUTER JOIN: asegura las filas de la derecha.
  • FULL OUTER JOIN: asegura todas las filas de ambas.

Dominar los distintos tipos de OUTER JOIN es clave para consultas completas, reportes y análisis de datos reales.

Compara variantes LEFT/RIGHT/FULL en JOINS y vuelve al Glosario SQL completo.

Scroll al inicio