diff --git a/mysql-test/r/join_outer.result b/mysql-test/r/join_outer.result
index 7981fc9c733cd669b39d1eb5020a4b76b7c11179..b035f88da41869da1c7ad0b108d3d8d2b3f1660d 100644
--- a/mysql-test/r/join_outer.result
+++ b/mysql-test/r/join_outer.result
@@ -857,4 +857,10 @@ a	b	a	b
 1	1	1	2
 2	1	2	2
 3	1	NULL	NULL
+SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.a WHERE not(0+(t1.a=30 and t2.b=1));
+a	b	a	b
+1	1	1	2
+2	1	2	2
+3	1	NULL	NULL
+4	2	NULL	NULL
 DROP TABLE t1,t2;
diff --git a/mysql-test/t/join_outer.test b/mysql-test/t/join_outer.test
index 2ed7086746f0514cf0f361a6b50bcafe0cdf7507..fe9ec1e0963621fca0ec18ca67e215f4e7c088c6 100644
--- a/mysql-test/t/join_outer.test
+++ b/mysql-test/t/join_outer.test
@@ -610,6 +610,7 @@ SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.a;
 SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.a WHERE t1.b=1;
 SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.a
   WHERE t1.b=1 XOR (NOT ISNULL(t2.a) AND t2.b=1);
+SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.a WHERE not(0+(t1.a=30 and t2.b=1));
 
 DROP TABLE t1,t2;
 
diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h
index 7c48854850ecd27ea8a19ed421ba15cfa742020c..37b0674a094cd65ed7bea59e2855b9fb808011fb 100644
--- a/sql/item_cmpfunc.h
+++ b/sql/item_cmpfunc.h
@@ -966,6 +966,8 @@ public:
   enum Functype functype() const { return COND_AND_FUNC; }
   longlong val_int();
   const char *func_name() const { return "and"; }
+  table_map not_null_tables() const
+  { return abort_on_null ? not_null_tables_cache: and_tables_cache; }
   Item* copy_andor_structure(THD *thd)
   {
     Item_cond_and *item;
@@ -1013,7 +1015,7 @@ public:
   enum Type type() const { return FUNC_ITEM; }
   longlong val_int();
   const char *func_name() const { return "xor"; }
-  table_map not_null_tables() const { return and_tables_cache; }
+  void top_level_item() {}
 };