Módulo 4 · Relacionar tablas

LEFT JOIN: conservar la tabla principal

Incluye filas aunque no exista una coincidencia en la tabla relacionada.

⏱ 24 minNivel: InicialRequisito: INNER JOIN

0 de 40 lecciones

Al terminar esta lección podrás

  • Escribir un LEFT JOIN.
  • Interpretar NULL de la tabla derecha.
  • Evitar convertirlo accidentalmente en INNER JOIN.

Antes de empezar: INNER JOIN. Explica en una frase qué recuerdas antes de continuar.

La idea, sin código

LEFT JOIN conserva todas las filas de la tabla izquierda. Cuando no existe una pareja, las columnas de la derecha aparecen como NULL.

Pregunta guía: ¿qué representa cada fila antes y después de aplicar este concepto?

Sintaxis mínima

Estructura
FROM tabla_principal AS a
LEFT JOIN tabla_relacionada AS b
  ON ...

Primer ejemplo guiado

Datos de ejemplo: tabla clientes
idnombreciudademail
1AnaMadridana@ejemplo.es
2LuisValencialuis@ejemplo.es
3MartaMadridNULL
4OmarSevillaomar@ejemplo.es
5NoraBilbaonora@ejemplo.es
Datos de ejemplo: tabla pedidos
idcliente_idfechatotalestado
10112026-07-0265enviado
10222026-07-04189pendiente
10312026-07-0944enviado
10432026-07-11899cancelado
10552026-07-15118enviado

Analiza la consulta antes de comprobar el resultado:

SQL
SELECT c.nombre, p.id AS pedido
FROM clientes AS c
LEFT JOIN pedidos AS p ON c.id = p.cliente_id
ORDER BY c.id, p.id;
Resultado esperado
nombrepedido
Ana101
Ana103
Luis102
Marta104
OmarNULL
Nora105

Qué ocurre paso a paso

  1. Todos los clientes permanecen.
  2. Ana aparece dos veces porque tiene dos pedidos.
  3. Omar aparece con pedido NULL porque no tiene coincidencia.
Comprueba que lo entendiste

¿Qué tabla conserva todas sus filas en LEFT JOIN?

Error frecuente

Consulta o razonamiento problemático

Revisar
LEFT JOIN pedidos p ON c.id = p.cliente_id WHERE p.estado = 'enviado'

El filtro en WHERE elimina los NULL y puede convertir el resultado en equivalente a INNER JOIN. Si quieres conservar clientes sin pedidos, mueve el criterio a ON.

Práctica guiada

Básica · apoyo graduado

Resuelve una sola dificultad cada vez

Muestra todos los autores y, cuando exista, el título de sus libros.

Ahora sin guía

Intermedia · práctica autónoma

Transfiere lo aprendido

Cuenta pedidos por cliente incluyendo quienes tienen cero.

Comparar con una solución posible
SQL
SELECT c.nombre, COUNT(p.id) AS pedidos
FROM clientes AS c
LEFT JOIN pedidos AS p ON c.id = p.cliente_id
GROUP BY c.id, c.nombre;

Puede existir otra solución válida. Comprueba que produce el resultado pedido y que puedes explicar cada cláusula.

Resumen para llevarte

  • LEFT JOIN conserva la entidad principal.
  • COUNT(p.id) devuelve cero cuando no hay pedido.
  • Los filtros de la tabla derecha requieren atención.

Siguiente paso: Continúa con JOIN múltiples y duplicación de filas.

Consulta rápida