Чтобы обеспечить оптимальные планы выполнения, я бы порекомендовал создавать отдельные запросы и вызывать соответствующие в зависимости от "@find".
например
SPROC1 будет запрашивать идентификатор
SPROC2 будет запрашивать OLD_ID
Затем либо измените свой код вызова для вызова соответствующего sproc, ИЛИ, если вы просто хотите передать @find в качестве параметра, создайте 3-й sproc, который просто действует как перенаправление:
SPROC3:
IF (@find = 'no')
EXECUTE SPROC1
ELSE IF (@find = 'yes')
EXECUTE SPROC2
ELSE
....
Риск с другими подходами заключается в загрязнении плана выполнения, когда план создается для одного пути (например, @ find = 'no'), а затем, когда последующий вызов приходит с @ find = 'yes', он заканчивается использованием дальней менее подходящий план выполнения, что приводит к снижению производительности. Другими словами, вместо использования индекса по идентификатору он может в конечном итоге использовать индекс по OLD_ID, который явно не идеален (и наоборот).