Why DECLARE statement is making declared variables to be global?
For example:
SET NOCOUNT ON
GO
    DECLARE @LoopCounter TINYINT = 3
    WHILE @LoopCounter <> 0
    BEGIN
        DECLARE @TempDataSource TABLE ([ID] TINYINT)
        SELECT [ID]
        FROM @TempDataSource
        INSERT INTO @TempDataSource ([ID])
        VALUES (1)
              ,(2)
              ,(3)
        SET @LoopCounter = @LoopCounter - 1
    END
SET NOCOUNT OFF
GO
Gives me:

Should it returns nothing in all cases?