Módulo 4 · Relacionar tablas

Conserva todas las filas con LEFT JOIN

Incluye la tabla principal aunque no haya una coincidencia.

24 minNivel InicialAntes necesitas: INNER JOIN

0 de 45 lecciones

Al terminar, podrás

  • Elegir qué tabla debe quedar a la izquierda.
  • Interpretar los NULL que representan una coincidencia ausente.
  • Distinguir un filtro en ON de un filtro posterior en WHERE.

Recupera lo aprendido: ¿Qué hace INNER JOIN con una fila que no tiene coincidencia en la otra tabla?

La idea clave

LEFT JOIN conserva todas las filas de la tabla situada a la izquierda. Cuando no encuentra coincidencia a la derecha, completa las columnas derechas con NULL.

Pregunta previa: ¿qué conjunto debe aparecer completo? Esa tabla debe quedar a la izquierda. Para buscar clientes con o sin pedidos, empieza por clientes.

La sintaxis básica

Estructura
SELECT izquierda.columna, derecha.columna
FROM tabla_izquierda AS izquierda
LEFT JOIN tabla_derecha AS derecha
  ON izquierda.id = derecha.clave_foranea;

Una fila izquierda puede producir varias filas de resultado si encuentra varias coincidencias. Si no encuentra ninguna, produce una sola fila con valores NULL a la derecha.

Ejemplo paso a paso

Clientes que ilustran los tres casos
idnombre
1Ana Torres
2Luis Martín
6Pablo Sanz
12Mario Gil
Pedidos de esos clientes
idcliente_id
1011
1022
1031
1111
1142

Ana tiene tres pedidos, Luis tiene dos y Pablo y Mario no tienen ninguno.

SQL
SELECT c.nombre, p.id AS pedido_id
FROM clientes AS c
LEFT JOIN pedidos AS p
  ON c.id = p.cliente_id
WHERE c.id IN (1, 2, 6, 12)
ORDER BY c.id, p.id;
Resultado esperado
nombrepedido_id
Ana Torres101
Ana Torres103
Ana Torres111
Luis Martín102
Luis Martín114
Pablo SanzNULL
Mario GilNULL

Cómo funciona

  1. Ana y Luis se repiten una vez por cada pedido relacionado.
  2. Pablo y Mario se conservan porque proceden de la tabla izquierda.
  3. Sus columnas de pedido contienen NULL, señal de que no hubo coincidencia.
  4. El orden de las tablas determina qué conjunto queda completo.
Comprueba tu comprensión

¿Dónde debe colocarse clientes para conservar incluso clientes sin pedidos?

Un error habitual

Eliminar sin querer las filas sin coincidencia

Consulta que cambia el resultado
SELECT c.nombre, p.id
FROM clientes AS c
LEFT JOIN pedidos AS p ON c.id = p.cliente_id
WHERE p.estado = 'enviado';

Para las personas sin pedidos, p.estado es NULL; la condición de WHERE no es verdadera y esas filas desaparecen. Si quieres conservar clientes y limitar las coincidencias a pedidos enviados, coloca el filtro dentro de ON.

Practica con datos

Laboratorio SQL

Resuelve la consulta

Pendiente

Escribe una consulta que devuelva todos los clientes y el id de sus pedidos, incluidos los clientes sin pedidos.

Resultado esperado: 20 filas con nombre, pedido_id. El orden de las filas no importa.

Ver tablas y datos

Cargando la estructura del ejercicio…

La consulta usa datos ficticios y se ejecuta solo en este navegador.

Fuentes técnicas consultadas

Las fuentes confirman que LEFT JOIN añade una fila con valores nulos del lado derecho cuando una fila izquierda no encuentra coincidencia.

Comprueba si puedes explicarlo

Ana tiene tres pedidos y Mario ninguno. ¿Cuántas filas producen entre ambos con clientes LEFT JOIN pedidos?

Ver respuesta razonada

Cuatro: tres para Ana y una para Mario con NULL en las columnas del pedido. LEFT JOIN conserva a Mario, pero no reduce a una sola fila los pedidos de Ana.

Responde antes de abrir la explicación. Si necesitaste ayuda, cierra la respuesta y vuelve a explicarlo con tus palabras antes de dar la lección por aprendida.

Qué debes recordar

  • LEFT JOIN conserva todas las filas de la tabla izquierda.
  • Una fila izquierda puede repetirse si encuentra varias coincidencias.
  • Un filtro sobre la tabla derecha en WHERE puede eliminar las filas sin pareja.

A continuación: Continúa con Combina varias tablas sin duplicar filas.

Conceptos relacionados