Difference between Variable Table(@) and Temp(#) table

Table variables are Transaction neutral. They are variables and thus aren’t bound to a transaction.
Temp tables behave same as normal tables and are bound by transactions.

Consider Following Example
—————————————–

BEGIN TRAN
declare @var table (id int, data varchar(20) )
create table #temp (id int, data varchar(20) )

insert into @var
select 1, 'data 1' union all
select 2, 'data 2' union all
select 3, 'data 3'

insert into #temp
select 1, 'data 1' union all
select 2, 'data 2' union all
select 3, 'data 3'

select * from #temp
select * from @var

ROLLBACK

select * from @var
if object_id('tempdb..#temp') is null
    select '#temp does not exist outside the transaction'