Cuando trabajas con bases de datos, a menudo necesitas unir información de varias tablas. El LEFT JOIN te permite combinar datos asegurando que todos los registros de la tabla principal (izquierda) se incluyan en el resultado, incluso si no existe una coincidencia en la tabla secundaria (derecha).
Es ideal para detectar datos faltantes, crear reportes completos o analizar información donde algunos registros no tienen relación directa en otra tabla.
En este artículo aprenderás cómo funciona el LEFT JOIN, en qué se diferencia del INNER JOIN y cómo aplicarlo en distintos motores de bases de datos como SQL Server, MySQL, PostgreSQL y SQLite, con ejemplos prácticos que podrás ejecutar en db-fiddle.com.
¿Qué es el LEFT JOIN en SQL?
El LEFT JOIN (también llamado Left Outer Join) es un tipo de unión que devuelve todos los registros de la tabla izquierda, junto con los datos coincidentes de la tabla derecha.
Si no encuentra coincidencias en la tabla derecha, rellena con valores NULL en esas columnas.
Esto lo hace perfecto para:
- Detectar registros sin relación.
- Generar listados completos donde no quieres perder información.
- Identificar errores en la integridad de datos.
Sintaxis básica de LEFT JOIN
La sintaxis general es:
SELECT columnas
FROM tabla_izquierda AS A
LEFT JOIN tabla_derecha AS B
ON A.columna = B.columna;
Explicación:
tabla_izquierda→ la tabla principal, cuyos registros siempre se mostrarán.tabla_derecha→ la tabla secundaria, cuyos datos se mostrarán solo si hay coincidencias.ON→ define la condición que relaciona ambas tablas.
Estructura de datos para los ejemplos
Para los ejemplos, usaremos dos tablas: empleados y departamentos.
CREATE TABLE departamentos (
id_departamento INTEGER PRIMARY KEY,
nombre_departamento TEXT NOT NULL
);
CREATE TABLE empleados (
id_empleado INTEGER PRIMARY KEY,
nombre TEXT NOT NULL,
id_departamento INTEGER
);
Datos ficticios:
INSERT INTO departamentos (id_departamento, nombre_departamento) VALUES
(1, 'Recursos Humanos'),
(2, 'Ventas'),
(3, 'Tecnología');
INSERT INTO empleados (id_empleado, nombre, id_departamento) VALUES
(1, 'Ana', 1),
(2, 'Luis', 2),
(3, 'Carlos', NULL),
(4, 'María', 3),
(5, 'Pedro', NULL);
Puedes ejecutar este ejemplo directamente en db-fiddle.com para practicar.
Ejemplo práctico: LEFT JOIN básico
Queremos obtener una lista de todos los empleados y el nombre de su departamento, incluyendo a aquellos que no tienen un departamento asignado.
SELECT e.nombre AS Empleado,
d.nombre_departamento AS Departamento
FROM empleados AS e
LEFT JOIN departamentos AS d
ON e.id_departamento = d.id_departamento;
Resultado:
| Empleado | Departamento |
|---|---|
| Ana | Recursos Humanos |
| Luis | Ventas |
| Carlos | NULL |
| María | Tecnología |
| Pedro | NULL |
Interpretación:
CarlosyPedroaparecen en el resultado aunque no tengan un departamento asignado.- En esos casos, la columna
DepartamentomuestraNULL.
LEFT JOIN vs INNER JOIN
Si usáramos un INNER JOIN en el ejemplo anterior:
SELECT e.nombre AS Empleado,
d.nombre_departamento AS Departamento
FROM empleados AS e
INNER JOIN departamentos AS d
ON e.id_departamento = d.id_departamento;
Resultado:
| Empleado | Departamento |
|---|---|
| Ana | Recursos Humanos |
| Luis | Ventas |
| María | Tecnología |
Diferencia clave:
- El
INNER JOIN excluyeaCarlosyPedroporque no tienen coincidencias en la tabla dedepartamentos. - El
LEFT JOIN los incluyey muestraNULLen lugar del nombre de departamento.
Notas sobre rendimiento y compatibilidad
El LEFT JOIN funciona en la mayoría de los motores de bases de datos, pero considera estas recomendaciones:
- SQL Server
- Sintaxis estándar, igual que en el ejemplo.
- Indexar las columnas usadas en la condición
ONmejora el rendimiento.
- MySQL y PostgreSQL
- Utilizan la misma sintaxis estándar.
- PostgreSQL maneja bien grandes volúmenes de datos, pero siempre verifica el plan de ejecución.
- SQLite
- Totalmente compatible con la sintaxis estándar.
- Ideal para prácticas y ejemplos ligeros.
Tip de rendimiento:
Evita usar SELECT * en producción. En su lugar, selecciona solo las columnas necesarias.
Buenas prácticas al usar LEFT JOIN
- Define siempre la condición
ONclaramente para evitar combinaciones inesperadas. - Usa alias para mejorar la legibilidad de las consultas (
epara empleados,dpara departamentos). - Incluye solo las columnas necesarias en el
SELECT. - Revisa el resultado con datos de prueba antes de usarlo en producción.
- Si necesitas filtrar por columnas de la tabla derecha, coloca esas condiciones
en el WHERE con cuidado, o en elONsegún el caso.
Conclusión
El LEFT JOIN es fundamental para obtener reportes completos sin perder información de la tabla principal.
Te ayuda a identificar registros faltantes y a mantener la integridad de los datos.
Ahora te toca practicar.
Puedes ejecutar el ejemplo que vimos en este artículo directamente en db-fiddle.com y experimentar con tus propios datos.