Die Datenbank könnte sich bestimmte Statistiken halten, beispielsweise wie viele Einträge eine Tabelle hat und wie viele gleiche Werte in einem Index stehen usw. Anhand von sowas kann sie dann zur Laufzeit entscheiden, ob sie lieber gleich alles durchsucht, oder ob es sich lohnt den Index zu verwenden.
Die Art der Implementierung eines JOIN hängt (möglicherweise) von der Zeilenanzahl der beiden Eingabetabellen ab. Bei vielen Zeilen ist ein Ansatz sinnvoller, der erst mal etwas mehr Aufwand ist, der dann aber insgesamt doch schneller ist.