Primeiro, as tabelas temporárias locais criadas em um procedimento são eliminadas assim que o procedimento termina. Do BOL em Criar Tabela :
Se o seu código de acesso a dados estiver abrindo corretamente uma conexão, chamando um procedimento armazenado e, em seguida, fechando a conexão, a tabela temporária criada no procedimento será efetivamente destruída.
Eu digo "efetivamente" para trazer outro ponto. Eu não recomendaria descartar a tabela temporária no final do seu procedimento, embora eu adicionasse uma verificação antes de criar a tabela temporária e a descartasse se existir (por exemplo,
if object_id('tempdb..#Foo') is not null
). O argumento contra a eliminação da tabela temporária no final é que, ao chamar a instrução Drop, você está forçando o SQL Server a gastar recursos para destruir a tabela ali mesmo enquanto espera o término do procedimento. Se, em vez disso, você deixá-la sair do escopo, seu procedimento será encerrado imediatamente e você permitirá que o SQL Server destrua a tabela em um momento de sua própria escolha.