Если вы упомянули функцию дважды, это не значит, что она будет вычислена дважды в строке. Если повезет, оптимизатор запросов будет вычислять его только один раз для каждой строки. В зависимости от того, является ли UDF детерминированным или недетерминированным, отчасти это зависит от того, имеет ли он или нет.
Взгляните на примерный план выполнения. Может быть, вы обнаружите, что вы ни о чем не беспокоитесь.
Если он рассчитан дважды, вы можете попробовать это и посмотреть, изменит ли он план, но это все еще не гарантирует:
WITH T(someField,someOtherField,expensiveResult) as (
select someField, someOtherField, dbo.MyExpensiveScalarUDF(someField, someOtherField)
from someTable
)
select * from T
where expensiveResult in (thisVal,thatVal,theotherVal);