No estás usando un temp tabla, está utilizando una variable mesa. Hay una diferencia.
Las tablas temporales funcionan con transacciones, las tablas variables no. Consulte https://blog.sqlauthority.com/2009/12/28/sql-server-difference-temp-table-and-table-variable-effect-of-transaction/
Si tuviera que cambiar su tabla de variables @tab a una tabla temporal de #tab , obtendrá el comportamiento deseado.
Diferencias entre tablas temporales y variables:https://dba.stackexchange.com/questions/16385/cuál-es-la-diferencia-entre-una-tabla-temporal-y-tabla-variable-en- servidor-sql/16386#16386
Los enlaces que publiqué anteriormente analizan eso con más detalle de lo que pude.