Два значения не эквивалентны.
Как указано в документации по exclude(..)
:
Параметры поиска (**kwargs
) должны быть в формате, описанном в полевых поисках ниже. Несколько параметров объединяются через AND в базовом операторе SQL, и все это заключено в NOT()
.
Таким образом, первый запрос можно прочитать как:
-- first query
SELECT car.*
FROM car
WHERE NOT (brand = 'mercedes') AND NOT (YEAR <= 2000)
, тогда как последний эквивалентен:
-- second query
SELECT car.*
FROM car
WHERE NOT (brand = 'mercedes' AND YEAR <= 2000)
Первый запрос это семантически такой же, как " Все автомобили, которые не являются Mercedes; и которые не были построены ранееили в 2000".Тогда как второй запрос « Все автомобили, кроме Mercedeses, которые были построены до или в 2000 году. ».
Так что, если в таблице содержится Ford, который был построен в 1993 году, топервый запрос будет не включать его, тогда как второй будет, поскольку brand
это не Mercedes, он не исключен (поэтому он будет частьюнабор запросов).