Obawiam się, że bardzo niewiele opcji.
Zawsze musisz dotknąć tabeli dwa razy, niezależnie od tego, czy COUNT, EXISTS before, EXISTs in UNION, TOP itd.
select
id, category
from mytable
where category = @category
union all --edit, of course it's quicker
select
0, ''
where NOT EXISTS (SELECT * FROM mytable where category = @category)
Rozwiązanie EXISTS jest lepsze niż COUNT, ponieważ zatrzyma się, gdy znajdzie wiersz. COUNT przemierzy wszystkie wiersze, aby je policzyć