在使用SQL JOIN的时候发现在使用 ON 和 WHERE 筛选数据时结果不一样,所以创了两个表测试下.

创建测试表t3,t4,并插入数据

    CREATE TABLE t3(
     rn int,
     zjhm VARCHAR(50),
     `name` VARCHAR(50)
    )
    
    CREATE TABLE t4(
    rn int,
     zjhm VARCHAR(50),
     `phone` VARCHAR(50)
    )
    
    TRUNCATE TABLE t3;
    TRUNCATE TABLE t4;
    INSERT t3(rn,zjhm,name) VALUES(3,'101','A1013');
    INSERT t3(rn,zjhm,name) VALUES(2,'101','A1012');
    INSERT t3(rn,zjhm,name) VALUES(1,'101','A1011');
    INSERT t3(rn,zjhm,name) VALUES(2,'102','A1022');
    INSERT t3(rn,zjhm,name) VALUES(1,'102','A1021');
    INSERT t3(rn,zjhm,name) VALUES(1,'103','A1031');
    
    INSERT t4(rn,zjhm,phone) VALUES(1,'101','10011');
    INSERT t4(rn,zjhm,phone) VALUES(2,'101','10012');
    INSERT t4(rn,zjhm,phone) VALUES(1,'102','1002');
    INSERT t4(rn,zjhm,phone) VALUES(1,'103','1003');

先简单JOIN:
-- sql1
1.png

ON:
-- sql2
2.png
-- sql3
3.png

WHERE:
-- sql4
4.png
-- sql5
5.png

结论:
对比发现,LEFT JOIN在ON条件作用于驱动表(左表)的情况下,不符合条件的数据也会被保留一条,只是会关联不上右表(sql2).
而如果ON条件作用于右表,不符合条件的记录都会被筛选掉(sql3).
而使用WHRER,左表和右表都会被影(sql4,sql5).