Если вы стремитесь к эффективности, вы должны заметить, что хранимые процедуры рассчитают план запроса при первом запуске, затем кешируют его и затем используют тот же.В этом случае это означает, что он выберет использование @ValidIds в зависимости от первого значения @ ComplicatedSearch
Таким образом, я бы написал процедуру более похожую на
if @ComplicatedSearch = 1
exec simple_search
else
exec complex_search
Где simple_search включает ваш первый запроси complex_search также присоединяется к @ ValidIds
Если вы получаете запрос дважды, но для этого я бы создал представление
create view helper as
begin
SELECT
m.*
,a.*
FROM
MyTable m
INNER JOIN AdditionalInfoTable a
ON m.Id = a.MyTableId
end
, а затем просто выбираю из этого представления и сложные соединения присоединяются к @ValidIds