select Q.* from devices Q where Q.devices_id not in
(
select B.devices_id
from object_categories C
inner join devices_categories B on B.categoryId=C.categoryId and C.objectId=@objectId
GROUP BY B.devices_id Having COUNT(*)=(select count(*) from devices_categories Z where Z.objectId=@objectId)
)
P.S. интересно кто минус поставил, вроде у вас все верно
вместо явного join. Среде выполнения остается много возможностей по не оптимальному выполнению кода. Например: слепить cross join и только затем проверять where.
P.S. интересно кто минус поставил, вроде у вас все верно