No SQL padrão, union all
não é garantido que o resultado de a esteja em qualquer ordem. Então, algo como:
select 'A' as c union all select 'B'
Poderia retornar duas linhas em qualquer ordem (embora, na prática, em qualquer banco de dados que eu conheça, 'A' virá antes de 'B').
No SQL Server, isso se transforma em um plano de execução usando uma operação física de "concatenação".
Eu poderia facilmente imaginar que a operação de concatenação varreria suas entradas, retornando qualquer entrada que tivesse registros disponíveis. No entanto, encontrei a seguinte declaração na web ( aqui ):
O Processador de Consultas executará este plano na ordem em que os operadores aparecem no plano, o primeiro é o superior e o último é o final.
Pergunta: Isso é verdade na prática? Isso é garantido para ser verdade?
Não encontrei nenhuma referência na documentação da Microsoft de que as entradas são verificadas em ordem, da primeira à última. Por outro lado, sempre que tento executá-lo, os resultados sugerem que as entradas são, de fato, processadas em ordem.
Existe uma maneira de fazer com que o mecanismo processe mais de uma entrada por vez? Meus testes (usando expressões muito mais complicadas do que constantes) estão em uma máquina de 8 núcleos habilitada para paralelo, e a maioria das consultas tira proveito do paralelismo.