Temp-tabeller slettes ikke automatisk i slutningen af en forespørgsel, kun når den aktuelle forbindelse til DB slettes, eller du eksplicit sletter dem med DROP TABLE #columntable
Test enten for eksistensen af tabellen i starten af forespørgslen eller slet den altid til sidst (helst begge dele)
EDIT:Som Matrin sagde i sin kommentar, er dette faktisk en parse-fejl. Du får den samme fejl, hvis du kun parser SQL'en, som når du udfører den.
For at teste det delte jeg din forespørgsel op og prøvede:
if exists (select 1 from emp where id = 6)
create table #columntable (newcolumns varchar(100))
GO
if not exists (select 1 from emp where id = 6)
create table #columntable (oldcolumns varchar(100))
GO
Det er parseren glad for. Interessant nok, hvis du skifter til at bruge ikke-temp-tabeller, analyserer den oprindelige forespørgsel fint (jeg er klar over de problemer, der ville skabe, jeg var bare interesseret i at finde ud af, hvorfor forespørgslen ikke ville analysere).