Não entendi muito bem a necessidade do '-1' na formula do RAND -
SELECT ROUND(((500 - 100 - 1) * RAND() + 100),0);
.
Entendo que: ( 500 (intervalo final) - 100 (intervalo inicial) = 400 (número de intervalos entre 100 e 500) ) * RAND() + 100 (intervalo inicial) em conjunto com o ROUND geraria um numero aleatório entre 100 e 500, mas adicionar o -1 não faria o numero 500 nunca ser gerado?
Inclusive fiz alguns testes utilizando loop para testar e cheguei à essa mesma conclusão -
DECLARE @NUM INT;
DECLARE @I INT;
DECLARE @TABELA TABLE (TENTATIVA INT, NUM_GERADO INT)
SET @NUM = 0;
SET @I = 1
WHILE @NUM != 500
BEGIN
SELECT @NUM = ROUND(((500 - 100 - 1) * RAND() + 100),0);
PRINT 'TENTATIVA: ' + CONVERT(VARCHAR(30),@I);
INSERT INTO @TABELA VALUES (@I,@NUM);
SET @I = @I + 1;
END
SELECT * FROM @TABELA
Pode-se concluir que o numero 500 nunca vai ser gerado.
Porém sem utilizar o -1:
Nesse caso o 100 também seria englobado porque o RAND poderia gerar um número <= que 0,001 resultando em um número <= 100,4 e o ROUND arredondaria para baixo, também nunca passaria de 500 mesmo que o RAND gerasse o maior número possível.