Dankzij de links van gbn, denk ik dat dit mijn vraag beantwoordt:
Net als rand() wordt het eenmaal per kolom geëvalueerd, maar eenmaal geëvalueerd blijft het hetzelfde voor alle rijen....kijk naar de eigenschappen van de ComputeScalar-operator in het daadwerkelijke uitvoeringsplan, je zult zien dat GetDate() twee keer wordt geëvalueerd.
Ik heb het gecontroleerd en het lijkt erop dat dit nog steeds op dezelfde manier gebeurt in SQL Server 2008:GetUtcDate()
wordt tweemaal geëvalueerd in het uitvoeringsplan. Het zal niet per rij verschillende resultaten opleveren, maar het is mogelijk dat het per kolom een ander resultaat oplevert als de timing precies goed zou zijn.
Bewerken
Ik kan dit gedrag echt bewijzen! Probeer dit:
select GETUTCDATE(), RAND(), RAND(), ...[~3000 RAND()s]..., RAND(), GETUTCDATE()
from [TableOfYourChoice]
In mijn experiment eindigde ik met 2011-05-17 20:47:34.247
in de eerste kolom en 2011-05-17 20:47:34.250
in de laatste kolom, met een verschil van drie milliseconden als resultaat van de evaluatie van alle RAND()
s tussen de eerste en tweede aanroep van GETUTCDATE().