drop table if exists t1; CREATE TABLE t1 ( a char(5) NOT NULL, b char(4) NOT NULL, KEY (a), KEY (b) ) charset utf8mb4; INSERT INTO t1 VALUES ('A','B'),('b','A'),('C','c'),('D','E'),('a','a'); select * from t1,t1 as t2; a b a b A B A B A B C c A B D E A B a a A B b A C c A B C c C c C c D E C c a a C c b A D E A B D E C c D E D E D E a a D E b A a a A B a a C c a a D E a a a a a a b A b A A B b A C c b A D E b A a a b A b A analyze table t1; Table Op Msg_type Msg_text test.t1 analyze status OK explain select t1.*,t2.* from t1,t1 as t2 where t1.A=t2.B; id select_type table partitions type possible_keys key key_len ref rows filtered Extra 1 SIMPLE t1 NULL ALL a NULL NULL NULL 5 100.00 NULL 1 SIMPLE t2 NULL ref b b 16 test.t1.a 1 100.00 Using index condition Warnings: Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` join `test`.`t1` `t2` where (`test`.`t1`.`a` = `test`.`t2`.`b`) select t1.*,t2.* from t1,t1 as t2 where t1.A=t2.B order by binary t1.a,t2.a; a b a b A B a a A B b A C c C c a a a a a a b A b A A B select * from t1 where a='a'; a b A B a a drop table t1;