Meget få muligheder er jeg bange for.
Du skal altid røre bordet to gange, uanset om COUNT, EKSISTERER før, EKSISTERER i UNION, TOP-klausul osv.
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)
En EKSISTERER-løsning er bedre end COUNT, fordi den stopper, når den finder en række. COUNT vil krydse alle rækker for faktisk at tælle dem