Table variable are usually no faster (and often a lot slower) than temp tables.
They don't allow indexes (other than a primary key) and, more importantly, they don't maintain column statistics. Without statistics, the optimiser has no way to tell how many rows are in the table variable. It will guess 1. If there are a small number of rows (<100), then this isn't much of a problem. If the row count is large, then the lack of statistics can lead to a very, very bad plan and very slow queries.
Table variables have the same rules as temp tables as to when they're in memory as opposed to disk and they are added to the tempDB system tables just like a temp table. The only performance advantage on table variables is that changes made to them are not logged.
In that article, Tom never compairs temp tables to table vars. Just to a subquery
Gail Shaw -
SQL In the WildSQL Server MVP
--
Chaos, panic and disorder. My job here is done!