Al terminar esta lección podrás
- Predecir cardinalidad.
- Combinar JOIN y agregación.
- Diagnosticar duplicaciones.
Antes de empezar: INNER JOIN y LEFT JOIN. Explica en una frase qué recuerdas antes de continuar.
La idea, sin código
Un JOIN no «añade columnas» de forma automática: crea combinaciones de filas. Si una fila tiene varias coincidencias, aparecerá varias veces. Antes de agregar otro JOIN, predice la cardinalidad.
Pregunta guía: ¿qué representa cada fila antes y después de aplicar este concepto?
Sintaxis mínima
FROM a
JOIN b ON ...
JOIN c ON ...Primer ejemplo guiado
| id | nombre | ciudad | |
|---|---|---|---|
| 1 | Ana | Madrid | ana@ejemplo.es |
| 2 | Luis | Valencia | luis@ejemplo.es |
| 3 | Marta | Madrid | NULL |
| 4 | Omar | Sevilla | omar@ejemplo.es |
| 5 | Nora | Bilbao | nora@ejemplo.es |
| id | cliente_id | fecha | total | estado |
|---|---|---|---|---|
| 101 | 1 | 2026-07-02 | 65 | enviado |
| 102 | 2 | 2026-07-04 | 189 | pendiente |
| 103 | 1 | 2026-07-09 | 44 | enviado |
| 104 | 3 | 2026-07-11 | 899 | cancelado |
| 105 | 5 | 2026-07-15 | 118 | enviado |
Analiza la consulta antes de comprobar el resultado:
SELECT c.nombre, p.id, p.total
FROM clientes AS c
JOIN pedidos AS p ON c.id = p.cliente_id
WHERE c.ciudad = 'Madrid'
ORDER BY c.nombre, p.id;| nombre | id | total |
|---|---|---|
| Ana | 101 | 65 |
| Ana | 103 | 44 |
| Marta | 104 | 899 |
Qué ocurre paso a paso
- Ana aparece dos veces porque tiene dos pedidos.
- Marta aparece una vez por su pedido.
- La repetición describe relaciones uno-a-muchos, no necesariamente un error.
Error frecuente
Consulta o razonamiento problemático
JOIN clientes c ON p.cliente_id = c.id
JOIN clientes c2 ON p.cliente_id = c2.idUnir dos veces la misma relación sin necesidad multiplica columnas y complica el resultado.
Práctica guiada
Resuelve una sola dificultad cada vez
Muestra clientes y el total de sus pedidos no cancelados, incluyendo cero.
Solución razonada
SELECT c.nombre, COALESCE(SUM(p.total), 0) AS total FROM clientes AS c LEFT JOIN pedidos AS p ON c.id = p.cliente_id AND p.estado <> 'cancelado' GROUP BY c.id, c.nombre;Colocar el filtro en ON conserva clientes sin pedidos válidos; COALESCE convierte la suma ausente en cero.
Comprueba: identifica qué parte recupera, filtra, transforma, relaciona o modifica los datos.
Ahora sin guía
Transfiere lo aprendido
Explica cuántas filas esperas al unir clientes y pedidos antes de ejecutar.
Comparar con una solución posible
Se espera una fila por pedido coincidente y una fila adicional con NULL por cada cliente sin pedidos en un LEFT JOIN.Puede existir otra solución válida. Comprueba que produce el resultado pedido y que puedes explicar cada cláusula.
Resumen para llevarte
- Los JOIN crean combinaciones de filas.
- Predice la cardinalidad antes de agregar tablas.
- Una repetición puede ser correcta o señalar una condición incompleta.
Siguiente paso: Continúa con Consolidación: elegir y comprobar un JOIN.