Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1ekToo-0007Ij-PJ for pgsql-docs@arkaria.postgresql.org; Sat, 10 Feb 2018 11:59:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ekTon-00087S-7u for pgsql-docs@arkaria.postgresql.org; Sat, 10 Feb 2018 11:59:45 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1ekTom-000878-VN for pgsql-docs@lists.postgresql.org; Sat, 10 Feb 2018 11:59:45 +0000 Received: from smtprelay0244.b.hostedemail.com ([64.98.42.244] helo=smtprelay.b.hostedemail.com) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1ekToj-0001Zt-Rd for pgsql-docs@lists.postgresql.org; Sat, 10 Feb 2018 11:59:43 +0000 Received: from filter.hostedemail.com (10.5.19.248.rfc1918.com [10.5.19.248]) by smtprelay04.b.hostedemail.com (Postfix) with ESMTP id E59357B615; Sat, 10 Feb 2018 11:59:39 +0000 (UTC) X-Session-Marker: 616C76686572726540616C76682E6E6F2D69702E6F7267 X-Spam-Summary: 50,0,0,,d41d8cd98f00b204,alvherre@alvh.no-ip.org,:::,RULES_HIT:41:355:379:599:877:960:967:973:988:989:1260:1277:1311:1312:1313:1314:1345:1359:1381:1437:1515:1516:1518:1519:1534:1541:1593:1594:1595:1596:1711:1730:1747:1777:1792:2393:2525:2540:2560:2563:2682:2685:2828:2859:2933:2937:2939:2942:2945:2947:2951:2954:3022:3138:3139:3140:3141:3142:3352:3865:3866:3867:3870:3871:3872:3874:3934:3936:3938:3941:3944:3947:3950:3953:3956:3959:4250:4605:5007:6119:6261:7903:7904:9025:9121:10004:10400:10848:11658:11914:13069:13311:13357:13439:13894:13895:14764:21063:21080:21324:21627:30054:30070:30090,0,RBL:none,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:,MSBL:0,DNSBL:none,Custom_rules:0:0:0,LFtime:3,LUA_SUMMARY:none X-HE-Tag: box54_8e8a778d8c536 X-Filterd-Recvd-Size: 2031 Received: from alvin.alvh.no-ip.org (unknown [201.186.80.50]) (Authenticated sender: alvherre@alvh.no-ip.org) by omf11.b.hostedemail.com (Postfix) with ESMTPA; Sat, 10 Feb 2018 11:59:39 +0000 (UTC) Received: by alvin.alvh.no-ip.org (Postfix, from userid 1000) id 0DD8F611; Sat, 10 Feb 2018 08:59:37 -0300 (-03) Date: Sat, 10 Feb 2018 08:59:37 -0300 From: Alvaro Herrera To: jao@geophile.com, pgsql-docs@lists.postgresql.org Subject: Re: Documentation of EXCEPT ALL may have a bug Message-ID: <20180210115937.aqoolac4yk66ajeu@alvherre.pgsql> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <151819851166.9466.6740951677204542727@wrigleys.postgresql.org> User-Agent: NeoMutt/20170306-137-4415bd-dirty (1.8.0) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk PG Doc comments form wrote: > create table t(x int); > create table u(x int); > > insert into t values (1), (2), (2), (3), (3); > insert into u values (1), (2); > > select * from t except all select * from u; > x > --- > 3 > 3 > 2 > (3 rows) I find this pretty odd behavior. Is this not an outright bug? I haven't read the SQL standard on this matter[*], but if they define EXCEPT ALL to work like this, then it seems pretty useless. (Maybe they just didn't intend EXCEPT ALL to be useful?) If this is indeed the case, maybe we should amend the docs not only to explain this behavior but also to warn against the construct. [*] I didn't try terribly hard, but couldn't actually find where the behavior is defined. What I have on hand is a draft of SQL:2011 where this appears to be defined in 7.13 but I was unable to find the rules for set operations. It refers to 9.12 Grouping operations but that defines conformance rules only. -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services