Lección 3

JOINs y forma de la consulta

Usa joins con intención y reconoce cómo la forma de la consulta afecta las filas de resultado.

Un join combina filas de más de una tabla. En el código de aplicación, los joins suelen aparecer cuando una entidad referencia a otra: los pedidos pertenecen a usuarios, los comentarios a publicaciones, las facturas a cuentas.

SELECT users.email, orders.total
FROM users
JOIN orders ON orders.user_id = users.id
WHERE orders.status = 'paid';

La parte importante es la condición ON. Indica a la base de datos cómo se relacionan las filas. Si la condición es incorrecta o falta, el resultado puede multiplicarse en muchas más filas de las esperadas.

INNER JOIN vs LEFT JOIN

JOIN suele significar inner join: conservar filas que coinciden en ambos lados.

LEFT JOIN conserva cada fila de la tabla izquierda, aunque la derecha no tenga coincidencia:

SELECT users.email, orders.id
FROM users
LEFT JOIN orders ON orders.user_id = users.id;

Esto es útil para «mostrar usuarios aunque no tengan pedidos», pero también introduce valores NULL en el lado derecho.

Los duplicados suelen ser un problema de forma de consulta

Si un usuario tiene cinco pedidos, unir users con orders devuelve cinco filas para ese usuario. No es un bug de la base de datos. Es la forma de la relación.

Cuando aparecen filas que parecen duplicadas, pregunta:

  • ¿Es una relación uno a muchos?
  • ¿Debería la consulta agregar filas en su lugar?
  • ¿Falta parte de una clave compuesta en la condición del join?
  • ¿Un LEFT JOIN se convirtió en inner join porque un filtro del lado derecho pasó a WHERE?

Conclusión clave

Lee los joins como reglas de multiplicación de filas. Un formateador puede hacer visibles los bloques de join, pero aún debes razonar sobre cardinalidad: uno a uno, uno a muchos y relaciones opcionales.

Usa el Formateador SQL para hacer visible cada JOIN y condición ON antes de revisar los resultados de la consulta.

Volver al resumen del curso