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

El LEFT JOIN (también llamado LEFT OUTER JOIN) es un tipo de unión en SQL que devuelve todas las filas de la tabla izquierda y las filas coincidentes de la tabla derecha.
Si no hay coincidencias, los valores de la tabla derecha aparecen como NULL.

👉 Es especialmente útil cuando queremos listar todos los registros de una tabla principal, aunque no tengan datos relacionados en otra tabla.

Sintaxis básica de LEFT JOIN

SELECT columnas
FROM tabla1
LEFT JOIN tabla2
  ON tabla1.columna = tabla2.columna;
  • tabla1: tabla izquierda (se muestran todas sus filas).
  • tabla2: tabla derecha (solo se muestran las coincidencias).
  • ON: condición que relaciona ambas tablas.

Ejemplo básico de LEFT JOIN

Supongamos estas tablas:

clientes

idnombre
1Ana
2Luis
3Carla

pedidos

idcliente_idtotal
1012500
1023300

Consulta:

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

Resultado:

nombretotal
AnaNULL
Luis500
Carla300

👉 Ana aparece en el resultado aunque no tenga pedidos.
El valor de total es NULL porque no hay coincidencia en la tabla pedidos.

LEFT JOIN vs INNER JOIN

  • INNER JOIN → devuelve solo las filas con coincidencia en ambas tablas.
  • LEFT JOIN → devuelve todas las filas de la tabla izquierda, aunque no haya coincidencia en la derecha.

Ejemplo con los datos anteriores:

  • INNER JOIN devolvería solo Luis y Carla.
  • LEFT JOIN devuelve Ana, Luis y Carla.

LEFT JOIN con múltiples tablas

Se pueden encadenar varios JOIN en la misma consulta:

SELECT c.nombre, p.id AS pedido, pr.nombre AS producto
FROM clientes c
LEFT JOIN pedidos p ON c.id = p.cliente_id
LEFT JOIN productos pr ON p.producto_id = pr.id;

👉 Muestra todos los clientes, sus pedidos (si existen) y los productos de esos pedidos.
Los clientes sin pedidos aparecen con NULL en las columnas de pedidos y productos.

LEFT JOIN con condiciones adicionales

Podemos aplicar filtros a las filas coincidentes o nulas:

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

👉 Solo devuelve clientes que tienen pedidos mayores a 400.
⚠️ Importante: esta condición elimina los NULL.
Si querés mantener los clientes sin pedidos, hay que mover el filtro al JOIN:

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

👉 En este caso, los clientes sin pedidos todavía aparecen.

Ejemplo avanzado: detectar clientes sin pedidos

SELECT c.nombre
FROM clientes c
LEFT JOIN pedidos p ON c.id = p.cliente_id
WHERE p.id IS NULL;

👉 Lista los clientes que no han hecho ningún pedido.

Este patrón es muy común en reportes de «faltantes» o registros huérfanos.

LEFT JOIN y agregaciones

Podemos usar LEFT JOIN con funciones de agregación como COUNT:

SELECT c.nombre, COUNT(p.id) AS cantidad_pedidos
FROM clientes c
LEFT JOIN pedidos p ON c.id = p.cliente_id
GROUP BY c.nombre;

Resultado:

nombrecantidad_pedidos
Ana0
Luis1
Carla1

👉 Gracias al LEFT JOIN, Ana aparece con 0 pedidos.

LEFT JOIN vs RIGHT JOIN

  • LEFT JOIN: todas las filas de la izquierda.
  • RIGHT JOIN: todas las filas de la derecha.

Ejemplo:

  • Si queremos todos los clientes → usar LEFT JOIN.
  • Si queremos todos los pedidos, incluso sin cliente válido → usar RIGHT JOIN.

En la práctica, LEFT JOIN se usa mucho más.

Errores comunes con LEFT JOIN

  1. Olvidar la condición ON
SELECT * FROM clientes LEFT JOIN pedidos;

👉 Esto genera un producto cartesiano: todas las combinaciones posibles.

  1. Colocar filtros en WHERE en lugar de ON
    👉 Puede eliminar las filas nulas, invalidando el propósito del LEFT JOIN.
  2. Confundir con INNER JOIN
    👉 A veces se escribe LEFT JOIN pero se agrega una condición que descarta los NULL. El resultado final termina siendo equivalente a un INNER JOIN.

Buenas prácticas con LEFT JOIN

  • Usar alias (c, p, pr) para mejorar legibilidad.
  • Asegurar índices en las columnas usadas en ON (cliente_id, id).
  • Mover condiciones que afectan la tabla derecha al ON si se quieren conservar filas nulas.
  • Revisar siempre los resultados con IS NULL para detectar registros sin coincidencias.

Ejemplo real: clientes y facturas pendientes

SELECT c.nombre, f.monto, f.fecha
FROM clientes c
LEFT JOIN facturas f 
  ON c.id = f.cliente_id 
  AND f.pagada = FALSE;

👉 Lista todos los clientes y, si tienen facturas pendientes, muestra el monto y la fecha.
Si no tienen facturas pendientes, aparecen con NULL.

LEFT JOIN en distintos motores

  • MySQL/MariaDB: soportado completamente.
  • PostgreSQL: soportado.
  • SQL Server: soportado.
  • Oracle: soportado (sintaxis moderna LEFT JOIN). En versiones antiguas se usaba (+).

Preguntas frecuentes (FAQ)

1. ¿LEFT JOIN y LEFT OUTER JOIN son lo mismo?
Sí. La palabra OUTER es opcional.

2. ¿Qué pasa si no hay coincidencias en la tabla derecha?
El resultado muestra NULL en las columnas de esa tabla.

3. ¿Se pueden unir más de dos tablas con LEFT JOIN?
Sí, se pueden encadenar múltiples LEFT JOIN en la misma consulta.

4. ¿LEFT JOIN afecta el rendimiento?
Sí, puede ser más costoso que INNER JOIN, especialmente en tablas grandes sin índices.

5. ¿Qué diferencia hay entre LEFT JOIN y RIGHT JOIN?
Son equivalentes, pero intercambiando el orden de las tablas. La práctica habitual es usar LEFT JOIN por convención.

Conclusión

El LEFT JOIN en SQL es una herramienta fundamental para obtener todos los registros de una tabla principal, aunque no tengan coincidencias en otra.

  • Es ideal para reportes de «faltantes» o «sin relación».
  • Permite detectar registros huérfanos.
  • Se combina muy bien con agregaciones (COUNT, SUM).

Dominar su uso es clave para trabajar con bases de datos relacionales de manera profesional.

Mira ejemplos y trampas comunes en JOINS y repasa más definiciones en el Glosario SQL completo.

Scroll al inicio