JOIN Einschränkung in Vergleich mit der Where Einschränkung
Es ist sehr wichtig zu verstehen wo der Unterschied liegt in der Einschränkung der Datenmenge.
Man hat ja zwei verschiedene Möglichkeiten:
In der WHERE Bedingung
SELECT OB_OBJEKT, OB_BEZEICHNUNG, FK_FUNKTION
FROM NET_OBJEKT obj
LEFT OUTER JOIN NET_FUNK_ZU fz
ON fz.OB_ID = obj.OB_ID
WHERE FK_FUNKTION = 11300
- In diesem Fall holt sich der SQL Server zuerst alle Objekte
- Dann verknüpft er sich mit der Tabelle NET_FUNK_ZU
- Erst jetzt werden die Datensätze eingeschränkt auf FK_FUNKTION = 11300
- Das bedeutet, daß jene Objekte die keine Funktion 11300 haben nun herausfliegen. Dies liegt daran das zuerst mit LEFT JOIN verknüpft wird und erst dann werden mit der Where Bedingung die Datensätze eingeschränkt.
In der JOIN Bedingung
SELECT OB_OBJEKT, OB_BEZEICHNUNG, FK_FUNKTION
FROM NET_OBJEKT obj
LEFT OUTER JOIN NET_FUNK_ZU fz
ON fz.OB_ID = obj.OB_ID
AND FK_FUNKTION = 11300
- In diesem Fall holt sich der SQL Server zuerst alle Objekte
- Dann schränkt er die Tabelle NET_FUNK_ZU = 11300 ein
- Dann verknüpft er sich mit der Tabelle NET_FUNK_ZU
- Das bedeutet, daß jene Objekte die keine Funktion 11300 haben NICHT rausgeflogen sind, da der SQL Server sich mit einem LEFT JOIN verknüpft hat.