Escopo de variáveis definidas em um bloco while em procedimentos armazenados - SQl Server

Encontrei um cenário interessante (pelo menos para mim) em um procedimento armazenado. Gostaria de ter opinião e pensamentos de especialistas sobre isso.

DECLARE @loopcounter INT
SET @loopcounter=10

WHILE @loopcounter > 0
BEGIN
  DECLARE @insidevalue int

  IF (@loopcounter%2 = 0)
  SET @insidevalue = @loopcounter

  PRINT 'Value_' + CAST(@insidevalue AS NVARCHAR) + '_'

  SET @loopcounter = @loopcounter - 1
END

Eu esperava que este bloco desse a saída como abaixo

Value_10_

Value_ _

Value_8_

Value_ _

Value_6_

Value_ _

Value_4_

Value_ _

Value_2_

Value_ _

Em vez disso, obtive a saída como abaixo:

Value_10_

Value_10_

Value_8_

Value_8_

Value_6_

Value_6_

Value_4_

Value_4_

Value_2_

Value_2_

Eu pensei que se eu declarar uma variável dentro de um bloco while, para cada iteração, ela redefinirá o valor para NULL ou o valor padrão (de c # background

Se isso ocorre por design, minha pergunta é como o SQLServer trata a instrução 'DECLARE' para essa variável dentro do bloco while? Ele a ignora, pois a variável já está na memória?

Alguém pode me explicar esse comportamento?

questionAnswers(7)

yourAnswerToTheQuestion