Да, это хорошая практика. Я всегда делаю это в начале рутины. В SQL Server 2016 + объекты могут D IE (Drop If Exists), так что вы можете упростить вызов:
DROP TABLE IF EXISTS #mytesttable;
Кроме того, даже в конце процедуры ваши временные объекты уничтожаются и даже механизм SQL присваивает уникальные имена временным таблицам, но следует учитывать и другое поведение.
Если вы называете временную таблицу с тем же именем, когда задействованы вложенные вызовы процедур (одна хранимая процедура вызывает другую ) возможно получить ошибку или испортить ваши данные. Это связано с тем, что временная таблица видна в текущей области выполнения, поэтому #table в одной процедуре будет видна во второй вызванной процедуре (поэтому вы можете изменить ее данные или удалить их).