The difference is that a Temp Table behaves as a "real" table while a table variable behaves as a variable. So you can index a temp table but you can't index a table variable
Not exactly true...you can create a primary key column which is implemented through an index.
Code:
Declare @VBForums table(pkKey Int Primary Key, Blah VarChar(20))
insert into @VBForums(pkKey,blah) Values(1,'blah')
insert into @VBForums(pkKey,blah) Values(2,'blah')
insert into @VBForums(pkKey,blah) Values(3,'blah')
insert into @VBForums(pkKey,blah) Values(4,'blah')
insert into @VBForums(pkKey,blah) Values(5,'blah')
select* from @VBForums
Look at the execution plan for that.