Você não está usando um
temp
tabela, você está usando uma variable
tabela. Há uma diferença. As tabelas temporárias funcionam com transações, as tabelas variáveis não. Consulte http://blog.sqlauthority.com/2009/12/28/sql-server-difference-temp-table-and-table-variable-effect-of-transaction/
Se você mudar sua tabela de variáveis
@tab
para uma tabela temporária de #tab
, você obteria o comportamento desejado. Diferenças entre tabelas temporárias e variáveis:https://dba.stackexchange.com/questions/16385/whats-the-difference-between-a-temp-table-and-table-variable-in- sql-server/16386#16386
Os links que postei acima passam por isso com mais detalhes do que eu poderia.