Graças aos links fornecidos pelo gbn, acredito que isso responda à minha pergunta:
Em comum com rand() Ele é avaliado uma vez por coluna, mas uma vez avaliado permanece o mesmo para todas as linhas.... observe as propriedades do operador ComputeScalar no plano de execução real, você verá que GetDate() é avaliado duas vezes.
Verifiquei e parece que isso ainda acontece da mesma maneira no SQL Server 2008:
GetUtcDate()
é avaliado duas vezes no plano de execução. Ele não produzirá resultados diferentes por linha, mas é possível que produza um resultado diferente por coluna se o tempo for correto. Editar
Eu posso realmente provar esse comportamento! Tente isto:
select GETUTCDATE(), RAND(), RAND(), ...[~3000 RAND()s]..., RAND(), GETUTCDATE()
from [TableOfYourChoice]
No meu experimento, acabei com
2011-05-17 20:47:34.247
na primeira coluna e 2011-05-17 20:47:34.250
na coluna final, mostrando uma diferença de três milissegundos como resultado da avaliação de todos os RAND()
s entre a primeira e a segunda chamadas para GETUTCDATE().