SQL desde cero · lección 6 de 6
Encontrar a quien no tiene pareja en la otra tabla: sospechosos sin robos, robos sin sospechoso y contar ceros.
LEFT JOIN conserva todas las filas de la tabla de la izquierda, aunque no tengan pareja. Donde no la hay, las columnas de la otra tabla salen en NULL.
NULL no es cero ni texto vacío: significa «no hay dato». No se compara con =, sino con IS NULL o IS NOT NULL.
Juntando las dos ideas sale la consulta más útil de este tema: un LEFT JOIN y un WHERE … IS NULL te da las filas que no tienen pareja. Y al contar, COUNT(r.id) ignora los NULL, mientras que COUNT(*) cuenta la fila igual.
sospechosos
| id | nombre | edad | ciudad | oficio |
|---|---|---|---|---|
| 1 | Lucía Prado | 34 | Bahía Lumen | fotógrafa |
| 2 | Joel Ibarra | 52 | Puerto Sal | cerrajero |
| 3 | Marta Solís | 27 | Bahía Lumen | enfermera |
| 4 | Iker Vela | 41 | San Ciro | taxista |
| 5 | Rocío Andrade | 63 | Puerto Sal | joyera |
| 6 | Damián Cuevas | 19 | San Ciro | repartidor |
| 7 | Elena Ruiz | 46 | Bahía Lumen | contadora |
| 8 | Bruno Paz | 38 | Puerto Sal | mecánico |
robos
| id | sospechoso_id | ciudad | botin |
|---|---|---|---|
| 1 | 2 | Puerto Sal | 1200 |
| 2 | 2 | Puerto Sal | 800 |
| 3 | 4 | San Ciro | 300 |
| 4 | 5 | Puerto Sal | 5000 |
| 5 | 8 | Puerto Sal | 450 |
| 6 | 8 | Bahía Lumen | 950 |
| 7 | 8 | San Ciro | 150 |
| 8 | 1 | Bahía Lumen | 2200 |
| 9 | NULL | Bahía Lumen | 700 |
Puedes escribir aquí mismo: cada ejercicio se ejecuta con DuckDB en tu navegador, sin instalar nada. Con el teclado: Ctrl + Enter.
El nombre de cada sospechoso y el botín de sus robos, incluyendo a quienes no tienen ninguno.
Cambia JOIN por LEFT JOIN.
Sólo el nombre de los sospechosos sin ningún robo.
Quédate con las filas sin pareja: WHERE r.id IS NULL
El nombre de cada sospechoso y cuántos robos tiene, con 0 para quien no tiene ninguno.
COUNT(*) cuenta también la fila de NULLs, así que Marta sale con 1. Cuenta una columna de robos: COUNT(r.id)
Todas las columnas de los robos sin sospechoso conocido, partiendo de un LEFT JOIN.
Ahora la tabla sin pareja es sospechosos: WHERE s.id IS NULL
Lección terminada. Ya tienes lo que piden los casos del juego: filtrar, agrupar y unir tablas.
Ahora, un caso de verdad: «El expediente que nadie pidió» →