The execution plans may be the same at the moment but if either column is altered in the future to allow NULLs the NOT IN version will need to do more work (even if no NULLs are actually present in the data) and the semantics of NOT IN if NULLs are present are unlikely to be the ones you want anyway. The following example finds rows in the DimCustomer table where the LastName and BirthDate do not match any entries in the ProspectiveBuyers table. It is used to restrict the number of rows returned by the SELECT Statement.
NOT EXISTS works as the opposite as EXISTS. This subquery gets a list of customers that were created prior to days ago. The Oracle EXISTS condition is used in combination with a subquery and is considered to be met if the subquery returns at least one row. If the subquery does not return any records, the EXISTS clause will evaluate to false and the EXISTS.
Phil Factor explains why you should prefer use of EXISTS over IN, when comparing data sets using a subquery. MySQL ignores the SELECT list in such a subquery, so it makes no difference. Operatory Exists i Not Exists Operator Exists sprawdza czy kolejne elementy z jednego zbioru znajdują swój odpowiednik w drugim zbiorze. Istotny jest sam fakt zaistnienia odpowiednika po drugiej stronie, a nie ilość wystąpień.