[Resolvido] - Incoerencia SQL Server

Eu e um amigo estávamos fazendo uma atividade para a faculdade, quando nos deparamos com um loop infinito, mesmo tendo uma condição para incrementar o indice, nós resolvemos isso com uma gambiarra, mas fica a dúvida, porque esse código não esta funcionando?

Obs: Todas as declare possuem @ antes da variável, porém o guj reconhecia como marcador de usuário.

declare y as Integer
declare i as Integer
declare random_number as Integer
set i = 0
set y = 0

insert into dbo.grupos
values (‘A’,1)

insert into dbo.grupos
values (‘B’,2)

insert into dbo.grupos
values (‘C’,3)

insert into dbo.grupos
values (‘D’,4)

while i < 4
BEGIN
select random_number =(20-5+1) * RAND() + 1

	if(y <4)
		BEGIN
		if(i = 0)
			BEGIN
				
				if not exists (select codigotime from dbo.grupos where codigotime = random_number)
				begin
					insert into dbo.grupos   
				values ('A',random_number)
				set y = y +1 
				end
				
			END
		
		if(i = 1)
			BEGIN
				if not exists (select codigotime from dbo.grupos where codigotime = random_number)
				begin
					insert into dbo.grupos
					values ('B',random_number)
					set y = y +1
				end
			END
		
		if(i = 2)
			BEGIN
				if not exists (select codigotime from dbo.grupos where codigotime = random_number)
				begin
					insert into dbo.grupos
					values ('C',random_number)
					set y = y +1
				end
			END
		
		
	   if(i = 3)
		BEGIN
		 if not exists (select codigotime from dbo.grupos where codigotime = @random_number)
		  begin
			insert into dbo.grupos
			values ('D',random_number)
			set y = y +1
		  end
		END
		
		END
	   if(y = 4)
			BEGIN
				set y = 0
				set i = i + 1	
			END 

END

select * from dbo.grupos

truncate table dbo.grupos

Descobri, o problema estava na formação do Rand, deveria ser apenas
select random_number =(20) * RAND() + 1