Just to add:
There is different behavior on SQL-Server 2012. I have to change the statement to (there is no 'if exists')
if object_id ('tempdb..#t') is not null drop table #t
execute ('create table #t (i int, z int)')
select * from #t
GO
-- second Batch
if object_id ('tempdb..#t') is not null drop table #t
create table #t (i int)
execute ('alter table #t add z int')
select * from #t
There is an error on SQL-Server 2012:
Msg 208, Level 16, State 0, Line 3
Invalid object name '#t'.
The resut will be i,z.
Read the question! The first batch returns exactly that error!