Я почти уверен, что наконец понял, что вы пытаетесь спросить, и ответ - Нет, вы не можете использовать выражение CASE так, как вы думаете, для управления условием JOIN.
Если вы правильно поняли, если вы правильно поняли, то можете использовать OR в условии JOIN и использовать TOP 1 с ORDER BY, чтобы присвоить результату правильный результат:
SELECT TOP 1 @provid = prv.ID
FROM StagingProvider StagePrv
JOIN Providers prv
ON StagePrv.ClientID = prv.ClientID
AND (
prv.ExternalProviderID = StagePrv.[Provider_ID]
OR prv.NPI = StagePrv.NPI
)
WHERE StagePrv.ID = @stageprovid
ORDER BY CASE
WHEN prv.ExternalProviderID = StagePrv.[Provider_ID] THEN 0
ELSE 1
END;
Другим, возможно, лучшим подходом было бы использование UNION, но я думаю, что это, вероятно, ближе к тому, что вы просите.