Let me clarify -- you are asking for all the rows in both tables. The most efficient way of doing this is to fullscan the table and use the hash join that the plan shows. However when you only want the indexed column of the fact table to be retrieved then the index can be treated as a skinny table. The overhead of using the nested loop join is offset by not having to go to the table itself for any other columns.

When retrieving all columns of the table how does performance compare between the full scan/hash join method and an index-based method?