Nas aulas o professor utiliza como condição de comparação do WHILE apenas o '<', porém na resposta do exercício está sendo utilizado o '<=' (menor ou igual), dessa forma não estaria incorreta?
Pois, antes de entrarmos no laço WHILE, o cursor já está na primeira posição, então se por acaso o número aleatório retornar 1, teremos WHILE 1 <= 1, essa condição será TRUE e o cursos irá retornar o 2 elemento o que estará incorreto. Fiz um teste utilizando o '<=' no WHILE e notei que o cliente retornado é o segundo, isso setando a variável @ALEATORIO como 1.
-- CLIENTE ALEATORIO
DECLARE @CLIENTE_ALEATORIO VARCHAR(12)
DECLARE @VENDEDOR_ALEATORIO VARCHAR(12)
DECLARE @PRODUTO_ALEATORIO VARCHAR(12)
DECLARE @VAL_INICIAL INT
DECLARE @VAL_FINAL INT
DECLARE @ALEATORIO INT
DECLARE @CONTADOR INT
SET @CONTADOR = 1
SET @VAL_INICIAL = 1
SELECT @VAL_FINAL = COUNT(*) FROM [TABELA DE CLIENTES]
SET @ALEATORIO = [dbo].[NumeroAleatorio](@VAL_INICIAL, @VAL_FINAL)
SET @ALEATORIO = 1 -- DEVERIA RETORNAR O PRIMEIRO CLIENTE
DECLARE CURSOR1 CURSOR FOR SELECT CPF FROM [TABELA DE CLIENTES]
OPEN CURSOR1
FETCH NEXT FROM CURSOR1 INTO @CLIENTE_ALEATORIO
WHILE @CONTADOR <= @ALEATORIO
BEGIN
FETCH NEXT FROM CURSOR1 INTO @CLIENTE_ALEATORIO
SET @CONTADOR = @CONTADOR + 1
END
CLOSE CURSOR1
DEALLOCATE CURSOR1
SELECT @CLIENTE_ALEATORIO