joins

¿Por qué un join crea duplicados?

join no siempre crea un error: a menudo revela una relación de uno a muchos mal prevista.

Equipo de SQL.tn10 min
Una fila principal se expande a varias filas secundarias legítimas después de join

¿Qué representa una línea antes y después de join?

Un pedido puede contener varias líneas de productos. Después de join, una línea representa un artículo pedido y el número de pedido se repite legítimamente.

El problema aparece cuando luego agregamos una cantidad almacenada a nivel de orden: se repite una vez por línea y se sobrevalora.

Los nombres, cantidades y datos utilizados en este artículo son ficticios y creados con fines de aprendizaje.

La consulta explicada

Empieza por definir qué debe representar una fila del resultado. Esta decisión determina las columnas, agrupaciones y controles necesarios.

El siguiente ejemplo aísla el mecanismo principal. Ejecútelo, observe el resultado y luego cambie una cláusula a la vez para comprender su efecto.

Calcular las ventas a nivel de detalle de línea
SELECT p.categorie,
       SUM(l.quantite * l.prix_unitaire) AS chiffre_affaires
FROM lignes_commandes l
JOIN produits p ON p.id_produit = l.id_produit
GROUP BY p.categorie;

Lea el resultado como un analista.

La medida utiliza las columnas presentes en el nivel de detalle de la fila. La categoría proviene del producto y no cambia la cantidad de líneas de detalle.

Para utilizar una métrica de pedido, primero añade las filas o la subtabla a nivel de pedido antes de unirse.

  • Cuenta las líneas antes y después de JOIN.
  • Comprueba la unicidad de cada clave.
  • Escribe la cardinalidad esperada.
  • Conciliar el total final con una fuente independiente.

Errores que distorsionan el análisis

Una consulta puede ser válida sin responder correctamente a la pregunta. Los errores más costosos suelen ser silenciosos: perímetro incorrecto, línea multiplicada o valor faltante interpretado como cero.

Antes de compartir el resultado, compárelo con una pequeña muestra calculada manualmente y mantén la definición del alcance con la consulta.

  • Añade DISTINCT sin entender la repetición.
  • Sume el monto de un pedido después de join en las líneas.
  • Conéctese en una columna no única.
  • Olvídate de que una segunda tabla de detalle multiplica aún más el resultado.

Ponte en practica

Resuelva el ejercicio de las tres tablas y comprueba manualmente una orden con dos líneas.

El simulador SQL de SQL.tn solo ejecuta consultas de lectura sobre datos ficticios en su navegador. Puede probar varias escrituras y comparar sus resultados sin instalar ningún software.

Pon esta guía en práctica.

Abre el ejercicio relacionado, ejecuta tu consulta y compara el resultado esperado.

Empezar el ejercicio