С SQL разбираюсь на сколько это возможно.
Но какой запрос:
... WHERE p.CategoryId IS NOT NULL THEN p.CategoryId IN (58,1,2,3) ELSE TRUE
или
WHERE p.CategoryId IN (58,1,2,3) OR p.CategoryId IS NULL
будет быстрее, я не знаю. Поэтому и спросил
На практике, имхо, разница будет сильно зависеть от используемой СУБД. Хороший оптимизатор в БД додумается, как такой запрос сделать быстро, если есть нужные индексы и статистика, а плохой — нет.