Las tablas temporales no se eliminan automáticamente al final de una consulta, solo cuando se elimina la conexión actual a la base de datos o las elimina explícitamente con DROP TABLE #columntable
Pruebe la existencia de la tabla al comienzo de la consulta o elimínela siempre al final (preferiblemente ambas)
EDITAR:Como dijo Matrin en su comentario, esto es en realidad un error de análisis. Obtiene el mismo error si solo analiza el SQL como cuando lo ejecuta.
Para probar eso, dividí tu consulta e intenté:
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
El analizador está contento con eso. Curiosamente, si cambia a usar tablas no temporales, la consulta original se analiza bien (me doy cuenta de los problemas que crearía, solo estaba interesado en saber por qué la consulta no se analiza).