on和where条件的区别如下:
1、生成临时表时,无论on中的条件是否为真,这里都会返回全表联接查询的记录。对于left join就会返回左表的全部数据,对于right join就会返回右全表的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有full join(left、right)的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
总结:
其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。 而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。