Les tables temporaires ne sont pas supprimées automatiquement à la fin d'une requête, uniquement lorsque la connexion actuelle à la base de données est supprimée ou que vous les supprimez explicitement avec DROP TABLE #columntable
Testez l'existence de la table au début de la requête ou supprimez-la toujours à la fin (de préférence les deux)
EDIT :Comme Matrin l'a dit dans son commentaire, il s'agit en fait d'une erreur d'analyse. Vous obtenez la même erreur si vous analysez uniquement le SQL comme lorsque vous l'exécutez.
Pour tester cela, j'ai divisé votre requête et j'ai essayé :
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
L'analyseur est satisfait de cela. Fait intéressant, si vous passez à l'utilisation de tables non temporaires, la requête d'origine s'analyse correctement (je me rends compte des problèmes que cela créerait, j'étais juste intéressé de savoir pourquoi la requête ne serait pas analysée).