Я бы сделал это с помощью соединения следующим образом:
SELECT *
FROM cards c
LEFT JOIN OnDeckTable o ON c.CardID = o.CardID
WHERE c.CardID = @CardID
AND (((@alreadyOnDeck = 0) AND (o.CardID is not null)) OR
((@alreadyOnDeck = 1) AND (o.CardID is null)))
Я считаю, что это будет быстрее, чем предложения подзапроса, но я не проверял.
Также обратите внимание,Я не тестировал приведенный выше код, он может содержать опечатки.
Самый быстрый способ решить эту проблему - заключить в один оператор if переменную @alreadyOnDeck, например:
if (@alreadyOnDeck = 1)
-- select for this case
else
-- select for this case.
Если ваш код находится в хранимой процедуре, это будет самый быстрый способ, входные данные не будут меняться во время запроса.