Temp-tabeller släpps inte automatiskt i slutet av en fråga, bara när den aktuella anslutningen till DB släpps eller du uttryckligen tar bort dem med DROP TABLE #columntable
Antingen testar du om tabellen finns i början av frågan eller tar alltid bort den i slutet (helst båda)
EDIT:Som Matrin sa i sin kommentar, detta är faktiskt ett analysfel. Du får samma fel om du bara analyserar SQL som när du körde den.
För att testa det delade jag upp din fråga och försökte:
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
Parsern är nöjd med det. Intressant nog, om du ändrar till att använda icke-temp tabeller, analyserar den ursprungliga frågan bra (jag inser de problem som skulle skapa, jag var bara intresserad av att ta reda på varför frågan inte skulle analyseras).