Разумнее использовать WHERE NOT EXIST, который скорее всего будет более эффективен:
SELECT [DISTINCT] number
FROM table t1
WHERE service NOT IN (1,2,3)
AND NOT EXISTS (
SELECT NULL
FROM table t2
WHERE t1.number = t2.number
AND t2.service IN (1,2,3)
)
Индекс по
(number, service) - весьма желателен.
Если
service - целочисленное поле со значениями от единицы и более, то для даных конкретных условий можно построить и более эффективный запрос:
SELECT number
FROM test
GROUP BY number
HAVING MIN(service) > 3