--disable_warnings DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t2; DROP PROCEDURE IF EXISTS sp1; DROP PROCEDURE IF EXISTS sp2; --enable_warnings CREATE TABLE t1(c1 int); CREATE TABLE t2(c2 int); INSERT INTO t1 VALUES(1); INSERT INTO t2 VALUES(2); CREATE PROCEDURE sp1(OUT x1 int) SELECT * INTO x1 FROM t1; CALL sp1(@var1); SELECT @var1; CREATE PROCEDURE sp2(OUT x2 int) SELECT * INTO x2 FROM t2; CALL sp2(@var2); SELECT @var2; # 2 should be returned but 1 ... # why? SHOW PROCEDURE STATUS; SHOW CREATE PROCEDURE sp1; SHOW CREATE PROCEDURE sp2; # The SQL statement of sp2 is the same as sp1! DROP PROCEDURE IF EXISTS sp1; DROP PROCEDURE IF EXISTS sp2; DROP TABLE t1; DROP TABLE t2;