Le tabelle temporanee non vengono eliminate automaticamente alla fine di una query, solo quando la connessione corrente al DB viene interrotta o le elimini esplicitamente con DROP TABLE #columntable
Testare l'esistenza della tabella all'inizio della query o eliminarla sempre alla fine (preferibilmente entrambe)
EDIT:come ha detto Matrin nel suo commento, questo è in realtà un errore di analisi. Ottieni lo stesso errore se analizzi l'SQL solo come quando lo esegui.
Per testarlo ho diviso la tua domanda e ho provato:
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
Il parser ne è felice. È interessante notare che se si passa all'utilizzo di tabelle non temporanee, la query originale viene analizzata correttamente (mi rendo conto dei problemi che creerebbero, ero solo interessato a scoprire perché la query non veniva analizzata).