Временные таблицы не удаляются автоматически в конце запроса, только когда текущее соединение с БД сброшено или вы явно удалили их с помощью DROP TABLE #columntable
Либо проверить наличие таблицы в начале запроса, либо всегда удалить ее в конце (предпочтительно обе)
РЕДАКТИРОВАТЬ: Как сказал Матрин в своем комментарии, это на самом деле ошибка разбора. Вы получаете ту же ошибку, если анализируете только SQL, как при его выполнении.
Чтобы проверить это, я разделил ваш запрос и попытался:
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
Парсер доволен этим. Интересно, что если вы перейдете на использование не временных таблиц, исходный запрос будет в порядке (я понимаю, какие проблемы могут возникнуть, мне просто было интересно узнать, почему запрос не будет анализироваться).