Variable table is available only to the current session, for example, if you need to EXEC
another stored procedure within the current one you will have to pass the table as Table Valued Parameter
and of course this will affect the performance, with temporary tables you can do this with only passing the temporary table name
To test a Temporary table:
To test a Variable table:
something else I have experienced is: If your schema doesn't have GRANT
privilege to create tables then use variable tables.