La risposta di @Blorgbard (usando il primo 1 e ordina per) è probabilmente il modo migliore, ma solo per essere diverso potresti anche usare una sottoquery e non esiste:
SELECT name FROM names
WHERE (colA = @colA) OR (colA = 'ALL' AND NOT EXISTS(
SELECT name FROM names
WHERE colA = @colA))
Immagino che il "vantaggio" di questo sia che utilizza più sql standard.