Il problema OP avuto usando solo rand() è dovuto alla sua valutazione una volta per query .
Dalla documentazione :
L'approccio descritto di seguito rimuove l'ottimizzazione e sopprime questo comportamento, quindi rand() viene valutato una volta per riga :
dateadd( second
, rand(cast(newid() as varbinary)) * 43200
, cast('08:00:00' as time) )
newid()genera un valore univoco di tipouniqueidentifier;- il valore viene convertito con
castda usare come seme inrand([seed])funzione per generare unfloatpseudo-casuale valore da 0 a 1 e come seme è sempre unico anche il valore restituito è unico.