Okay, beispiel
Tabelle Price (Fund, Investable, AsOfDate, Price)
Tabelle Investable (Id, Fund, Name, AsOfDate)
Zwischen Price.Fund und Investable.Fund sowie Price.Investable und Investable.Id gibt es ForeignKey-Beziehungen
Wenn du jetzt folgende Abfrage nimmst
SELECT Fund, Investable, Name, AsOfDate, Price
FROM Investable
INNER JOIN Price
ON Fund = Fund
AND Investable = Id
... bekommst du mindestens 3 Meldungen "ambigious use of column name" o.s.ä. weil die Spalten in beiden Tabellen gleich heissen, nicht? Aus welcher Tabelle soll denn AsOfDate nun genommen werden?
Um das zu umgehen müsstest du schreiben
SELECT Investable.Fund, Price.Investable, Investable.Name, Price.AsOfDate, Price
FROM Investable
INNER JOIN Price
ON Price.Fund = Investable.Fund
AND Price.Investable = Investable.Id
Und jetzt stell dir vor, du hast n langen komplizierten Namen für die Tabelle ... sowas wie PrzybilskiUndIvanovichMonsterTabelle, willst du das jedes mal tippen oder C&P'en? Dann wird dein Code ziemlich unleserlich.
Stattdessen würdest zu einfach Aliase p und i verwenden ... lassen sich einfacer merken und machen es damit übersichtlicher.
SELECT I.Fund, P.Investable, I.Name, P.AsOfDate, Price
FROM Investable I
INNER JOIN Price P
ON P.Fund = I.Fund
AND P.Investable = I.Id
Soweit verstanden. Performancemässig hat das sogut wie 0 Einfluss.
Wie hast du dir denn den Ausführungsplan anzeigen lassen? Als "estimated" oder den wirklichen bei der Ausführung? "Estimated" heisst estimated, weils ne ungefähre Schätzung vom Server ist, der Actual Execution Plan sollte dir dann schon Unterschiede zeigen.
Oder anders, wenn du nur 5 Spalten von den insgesamt 200 in der Tabelle brauchst, brauchen auch nur 5 gelesen werden = weniger Daten = weniger Daten im Ram usw.
Ciao, Frank