When two tables are joined with a nested loop, Oracle reads all records in the outer table that match the single-table predicate on that table.
For each row that is found in the outer table, the corresponding record(s) in the inner table are search, either by full table scan or by index lookup.
Typical scenarios that lead to a nested loop join include
Join of «small» data sets
Join of «large» data sets with optimizer mode set to first_row
The join condition allows to access the inner table efficiently