create table t1 ( id number , city1 varchar2(30), city2 varchar2(30));

create table t2 ( id number, city varchar2(30));

insert into t1 values ( 1, 'Boston', 'Boston')

insert into t1 values ( 2, 'Boston' , 'Atlanta');

insert into t2 values ( 1, 'Boston');
insert into t2 values ( 2, 'Atlanta');

commit;

SQL> select * from t1;

ID CITY1 CITY2
---------- ------------------------------ ------------------------------
1 Boston Boston
2 Boston Atlanta

2 rows selected.

SQL> select * from t2 ;

ID CITY
---------- ------------------------------
1 Boston
2 Atlanta

2 rows selected.

Table t2 is used only once in the from clause.

SQL> select a.* from t1 a , t2 b where b.city = a.city1 and b.city = a.city2 ;

ID CITY1 CITY2
---------- ------------------------------ ------------------------------
1 Boston Boston

1 row selected.

Here, the tables are sorted and merge joined, producing only one row in t1 matches
city value of t2 with city1 and city2 in t1. This is what I expected. And Oracle gave me
a correct result set.


Now let us consider another example.

Table t2 is used 2 times in the from clause.

SQL> select a.* from t1 a , t2 b , t2 c where b.city = a.city1 and c.city = a.city2;

ID CITY1 CITY2
---------- ------------------------------ ------------------------------
2 Boston Atlanta
1 Boston Boston

2 rows selected.

Here, I got 2 rows becuase the join of t1(a) and t2(b) produced one row
and another join t1(a) and t2(c) produced 2nd row.

Probably your developer encountered the same set of data in his development envrionment,
that might caused him to use the table twice in his query.