El otro día en un curso sobre las novedades de SQL Server 2008 con los chicos del CIIN, hablando sobre los operadores Union salió a relucir. ¿Es lo mismo dos sentencias Unidas por un Union que por un Union ALL?
A primera vista las sentencias no dan error, pero no es lo mismo poner Union que Union ALL.
¿Diferencia?, básicamente cuando concatenamos con un Union el resultado nos saca sólo los resultados distintos, en cambio con el Union ALL, nos selecciona todos los registros, aunque este duplicado.
Con una tabla con datos: 1,2,3,4,5,6,7
Otra tabal con datos: 2,3,8,9,0
El resultado con Union seria: 1,2,3,4,5,6,7,8,9,0
El resultado con Union ALL seria: 1,2,2,3,3,4,5,6,7,8,9,0
Para resultados en los que tenemos claro que no se van a repetir los valores es conveniente usar Union ALL, debido a que Union hace un distinct de los datos, penalizando el rendimiento.
Interesante diferencia…
PD.1.: Union no sirve para campos Text y NText, pero si sirve el Union ALL (gracias Juan Ignacio).
Je Je…buen tip Quique ;-).
Saludos
JC’s
p.d: Tendrías que haber completado el ejemplo con los Grouping Sets de SQL Server 2008 :PPPP
Todo a su tiempo Juan Carlos…
Lo de Union y Union All es SQL estándar.
Es decir, funciona igual (o debería hacerlo) en todos los motores de Bases de Datos Relacionales.
Cierto, el Union vs Union All no es una novedad de SQL Server 2008.
En las versiones anteriores ocurre exactamente lo mismo.
Si, claro que esta en todas las versiones, simplemente he querido decir que cuando nos salio el tema estabamos en un curso de Sql server 2008, quizas no me explique bien.. lo siento. Espero que lo hayais entendido…
Recomiendo que vean las funciones Rollup, Cube y Grouping Sets. Son bastante útiles.
http://technet.microsoft.com/es-es/library/bb522495.aspx
Con un poquito de atraso, pero la gente de Microsoft se acordo de agregarlos en SQL, por suerte (Están disponibles en Oracle desde hace bastante).
que es un significado concreto
nesesiti una respuesta concreta
gracias, siempre quise saber la diferencia, me ayudo mucho!!!