After I read this post, I found a third way to achieve the query with NOT ANY. Does it really makes a difference?
Which of these queries run the faster?
NOT EXISTS
SELECT DISTINCT U.no FROM U
INNER JOIN PUF ON PUF.noU = U.no
WHERE NOT EXISTS (
SELECT DISTINCT PUF.noU FROM F
INNER JOIN PUF AS PUF2 ON PUF2.noF = F.no
WHERE VILLE <> 'Lausanne' AND PUF.noU = PUF2.noU
)
NOT attribute = ANY
SELECT DISTINCT U.no FROM U
INNER JOIN PUF ON PUF.noU = U.no
WHERE NOT PUF.noU = ANY (
SELECT DISTINCT PUF.noU FROM F
INNER JOIN PUF ON PUF.noF = F.no
WHERE VILLE <> 'Lausanne'
)
NOT IN (The initial one)
SELECT DISTINCT U.no FROM U
INNER JOIN PUF ON PUF.noU = U.no
WHERE PUF.noU NOT IN (
SELECT DISTINCT PUF.noU FROM F
INNER JOIN PUF ON PUF.noF = F.no
WHERE VILLE <> 'Lausanne'
)
If they're equivalent, should I use NOT EXISTS instead of NOT attribute = ANY () ?