From: Roy Lyseng Date: August 25 2010 6:43pm Subject: Re: bzr commit into mysql-5.1-bugteam branch (martin.hansson:3478) Bug#51070 List-Archive: http://lists.mysql.com/commits/116796 Message-Id: <4C756441.7080404@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit >> +SELECT * FROM t1 WHERE ( a, b ) IN ( SELECT c, d FROM t2 ) IS NULL; >> +SELECT * FROM t1 WHERE ( a, b ) NOT IN ( SELECT c, d FROM t2 ) IS UNKNOWN; >> +SELECT * FROM t1 WHERE (( a, b ) NOT IN ( SELECT c, d FROM t2 )) IS UNKNOWN; > > as you add (), is it that > ( a, b ) NOT IN ( SELECT c, d FROM t2 ) IS UNKNOWN > stands for > ( a, b ) NOT IN (( SELECT c, d FROM t2 ) IS UNKNOWN) > ? Mmmm no that wouldn't be parsable, (c,d) can't be compared to UNKNOWN. > Then maybe the added () are "just for fun"? They are different, but equivalent, syntactic constructs, so it can have some value in checking that the parser does a proper job. They are both incarnations of: ::= [ IS [ NOT ] ] But in the first case, the is a , more precisely an . In the second case, the is a , which traslates to a , which is , which again is . Finally, the is translated to a , as above. From your SQL oracle...