Объявление типа данных не очищает содержимое таблицы. Как только переменная таблицы будет там, она будет иметь все, что вы положили в нее. Выполнение кода даже не должно проходить место, где объявлена переменная. Это также будет работать.
if 0 = 1
begin
DECLARE @table [int_list_table]
end
Вам нужно только убедиться, что объявление находится перед любыми ссылками на переменную.
Чтобы исправить код так, чтобы он делал то, что вам нужно, вы, конечно, можете добавить delete from @table
непосредственно перед оператором вставки.