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

Beitrag lesen

Guten Abend,

ich verstehe etwas Grundlegendes nicht und zwar:

Gegeben sei eine Übersetzungstabelle. Eine Zeile besteht aus einer "id", der Sprache "locale", einem Fremdschlüssel "foreign_key" und dem Übersetzten Text "text".

Ich erzeuge nun eine temporäre Tabelle mit welcher ich die Sprachen abgleichen möchte:

DROP TABLE IF EXISTS available_lang;
CREATE TEMPORARY TABLE IF NOT EXISTS `available_lang` (
      locale VARCHAR(6) DEFAULT NULL
);
INSERT INTO available_lang (locale) VALUES ('de_DE'),('en_US'),('it_IT'),('fr_FR');

Um die fehlenden Sprachen anzuzeigen verwende ich folgendes Query:

SELECT 
   -- alle spalten
 
    FROM available_lang

   LEFT JOIN i18n
       ON i18n.locale = available_lang.locale
       AND foreign_key = 'cc0d1b70-637d-4f1f-89e5-2d74f26226f5'

Das funktioniert.

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

SELECT 
    -- alle spalten

    FROM available_lang

   LEFT JOIN i18n
       ON i18n.locale = available_lang.locale

WHERE 
   foreign_key = 'cc0d1b70-637d-4f1f-89e5-2d74f26226f5'
   OR foreign_key IS NULL 

Müsste es doch? Aber ich glaube, ich übersehe da was Grundlegendes.

lg mark