dedlfix: mysql - Warum funktioniert Abfrage in ON aber nicht in WHERE

Beitrag lesen

Tach!

Um die fehlenden Sprachen anzuzeigen verwende ich folgendes Query:

Warum nicht

SELECT * FROM available_lang 
WHERE locale NOT IN (
  SELECT locale FROM i18n WHERE foreign_key = 'cc0d1b70-637d-4f1f-89e5-2d74f26226f5'
)

Die Frage ist warum liefert folgendes Query nicht ein identisches Ergebnis:

In der zweiten ist zusätzlich auch noch ein OR foreign_key IS NULL drin. Vielleicht ist es aber auch noch ein Unterschied, ob die Bedingung ´schon beim Joinen oder erst danach ausgewertet wird. Da bin ich mir nicht ganz klar. Jedenfalls versuche ich immer Joins zu verhindern. Subquerys sind meist besser verständlich, und vor allem auch separat testbar.

dedlfix.