Tema SQL
LEFT JOIN
Devuelve todas las filas del lado izquierdo y, si existen, las coincidencias del derecho; donde no hay pareja, las columnas del derecho salen NULL. Sirve para incluir «ausencias» (clientes sin pedidos, categorías vacías).
Descripción
LEFT OUTER JOIN (abreviado LEFT JOIN) preserva el conjunto izquierdo al completo. Es el patrón habitual para listar entidades padre aunque no tengan hijos, detectar faltantes o contar solo hijos reales con COUNT(columna_hijo). Ten cuidado al filtrar columnas del lado derecho en WHERE: una condición del tipo derecho.columna = X convierte el efecto en INNER; suele ir en ON o usar IS NULL en WHERE cuando buscas «sin hijo».
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
SELECT columnas
FROM tabla_izquierda AS a
LEFT JOIN tabla_derecha AS b
ON condición
[ WHERE ... ]
[ GROUP BY ... ];
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- LEFT JOIN
- Mantiene cada fila izquierda una vez; si no hay fila derecha que cumpla ON, los campos de b se rellenan con NULL en esa fila del resultado.
- COUNT con LEFT JOIN
- COUNT(*) cuenta filas del resultado (incluye izquierdas sin derecha). COUNT(columna_derecha_no_nula) cuenta solo coincidencias reales. Agrupa por clave izquierda si quieres totales por entidad.
- GROUP BY
- Tras el join, agrupa por identificador de la entidad izquierda para agregar hijos. Las columnas del SELECT deben cumplir las reglas de agregación de tu motor respecto a columnas no agrupadas.
Ejemplos
Ejemplo 1
SELECT c.nombre, COUNT(p.id) AS total_posts
FROM categorias AS c
LEFT JOIN posts AS p ON p.categoria_id = c.id
GROUP BY c.id, c.nombre;
Ejemplo 2
SELECT a.nombre
FROM clientes a
LEFT JOIN pedidos b ON b.cliente_id = a.id
WHERE b.id IS NULL;
Temas relacionados
Enlaces internos para seguir leyendo: SELECT, WHERE, JOIN, GROUP BY y el resto de la referencia SQL.
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.