Hola m1di:
Hay que tener algunas consideraciones al momento de utilizar UNION:
Primero, si existen elementos que puedan aparecer en ambas partes de la unión y QUIERES QUE SE REPITAN debes utilizar UNION ALL, ya que de lo contrario la unión simple
ELIMINA LOS REGISTROS DUPLICADOS.
Segundo, no es lo mismo realizar agrupaciones sobre las subconsultas QUE SOBRE EL RESULTADO DE LA UNIÓN.
supongamos que tienes dos tablas con la siguiente información:
Código:
TABLA1
id descripcion cantidad
----------- ----------- -----------
1 uno 10
2 dos 20
3 tres 30
1 uno 40
2 dos 50
TABLA2
id descripcion cantidad
----------- ----------- -----------
1 uno 10
4 cuatro 20
5 cinco 30
4 cuatro 40
5 cinco 50
Observa cómo se comporta la unión dependiendo de cómo manejas el parámetro ALL y la agrupación:
Código SQL:
Ver originalSELECT id, descripcion, SUM(cantidad) FROM @tabla1 GROUP BY id, descripcion
UNION ALL
SELECT id, descripcion, SUM(cantidad) FROM @tabla2 GROUP BY id, descripcion ORDER BY id
/*
id descripcion
----------- ----------- -----------
1 uno 10
1 uno 50
2 dos 70
3 tres 30
4 cuatro 60
5 cinco 80
*/
SELECT id, descripcion, SUM(cantidad) FROM
(
SELECT id, descripcion, cantidad FROM @tabla1
UNION
SELECT id, descripcion, cantidad FROM @tabla2
) T
GROUP BY id, descripcion ORDER BY id
/*
id descripcion
----------- ----------- -----------
1 uno 50
2 dos 70
3 tres 30
4 cuatro 60
5 cinco 80
*/
SELECT id, descripcion, SUM(cantidad) FROM
(
SELECT id, descripcion, cantidad FROM @tabla1
UNION ALL
SELECT id, descripcion, cantidad FROM @tabla2
) T
GROUP BY id, descripcion ORDER BY id
/*
id descripcion
----------- ----------- -----------
1 uno 60
2 dos 70
3 tres 30
4 cuatro 60
5 cinco 80
*/
En el primer caso NO AGRUPA LAS DESCRIPCIONES DE LA UNIÓN RESULTANTE, solo las de las subconsultas.
En el segundo caso, el registro
Código:
id descripcion cantidad
----------- ----------- -----------
1 uno 10
aparece en ambas tablas, por lo tanto SÓLO SE CONTABILIZA UNA VEZ, es decir se eliminan los duplicados al no utilizar el parámetro ALL
En el tercer caso SI SE REALIZA LA AGRUPACIÓN SOBRE EL RESULTADO DE LA UNIÓN Y TAMBIÉN SE CONTABILIZAN LOS REGISTROS DUPLICADOS.
Saludos
Leo.