Tijdelijke tabellen zijn als gewone tabellen in de meeste kenmerken, behalve dat ze in TempDB gaan in plaats van in de huidige database, en ze verdwijnen na een beperkte reikwijdte (afhankelijk van of ze sessiegebaseerde of globale tijdelijke tabellen zijn). Maar alle wijzigingen aan gegevens in tijdelijke tabellen zijn gelogd in het transactielogboek, met alle gevolgen van dien voor de prestaties. otoh, u kunt ook zoveel indices of views, of triggers, of wat u maar wilt, aan een tijdelijke tabel toevoegen, precies zoals u zou doen aan een gewone tabel.
Tabelvariabelen zijn een soort sneltoets in-memory tabel (ze gebruiken ook temp DB). Wijzigingen hierin worden niet gelogd (dit verbetert de prestaties). Maar je kunt er maar één index op krijgen (omdat er geen indices kunnen worden gemaakt na de initiële declaratie-instructie, is de enige index die je kunt maken op een tabelvariabele degene die kan worden opgenomen in de initiële tabelvariabele-declaratie...
Declare @Tab Table (myKey integer Primary Key Not Null, data varchar(20))
Vanwege deze kenmerken zijn tijdelijke tabellen een betere keuze voor grote tabellen (breed en met veel rijen) en/of die tijdens hun levensduur meer dan één toegangspatroon zullen ondergaan, terwijl tabelvariabelen het beste zijn wanneer u een zeer smalle tabel nodig heeft ( sleutels alleen tabel, of sleutel met slechts één gegevenskolom), die altijd toegankelijk is voor die geïndexeerde sleutel...