У меня было то же самое, где его создает родитель. Вместо того, чтобы избавиться от предупреждения путем создания таблицы, если она не существует, я хочу иметь возможность генерировать исключение, если оно не существует. Помещение оператора CREATE после оператора return гарантирует, что он никогда не будет запущен, но также очищает предупреждение.
IF (OBJECT_ID('tempdb..#Foo') is null)
BEGIN
Raiserror('#Foo doesn''t exist.', 16, 1)
RETURN
CREATE TABLE #Foo (foo int) --Here just to get rid of compile warning
END