Dočasné tabulky nejsou automaticky zrušeny na konci dotazu, pouze když je zrušeno aktuální připojení k DB nebo je explicitně odstraníte pomocí DROP TABLE #columntable
Buď otestujte existenci tabulky na začátku dotazu, nebo ji vždy smažte na konci (nejlépe obojí)
EDIT:Jak řekl Matrin ve svém komentáři, toto je ve skutečnosti chyba analýzy. Pokud analyzujete pouze SQL, dostanete stejnou chybu jako při jeho spuštění.
Abych to otestoval, rozdělil jsem váš dotaz a zkusil:
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
Analyzátor je s tím spokojený. Je zajímavé, že pokud přejdete na použití nedočasných tabulek, původní dotaz analyzuje v pořádku (uvědomuji si problémy, které by to způsobilo, jen mě zajímalo, proč se dotaz neanalyzuje).