Der SQL-Vergleich zwischen booleschen Werten kann zu unerwarteten Ergebnissen führen
<p>Warum liefern die meisten (alle?) SQL-Datenbanken die folgenden Ergebnisse: </p>
<pre class="brush:php;toolbar:false;">SELECT FALSE < FALSE / 0 Ok
SELECT TRUE < FALSE;
SELECT NOT(FALSE) <
SELECT NOT(TRUE) < ? </pre>
<p>Nur zur Kontrolle: </p>
<pre class="brush:php;toolbar:false;">SELECT NOT(TRUE) = FALSE -- TRUE / 1 Ok
SELECT NOT(FALSE) = TRUE -- TRUE / 1 Ok</pre>
<p>In Postgres kann ich auch Folgendes überprüfen: </p>
<pre class="brush:php;toolbar:false;">SELECT pg_typeof(TRUE), pg_typeof(NOT(FALSE));
-- boolean |. boolean</pre>
<p>Ich habe PostgreSQL, SQLite3 und MariaDB ausprobiert und sie liefern alle die gleichen unerwarteten Ergebnisse. </p><p>
<strong>Was habe ich übersehen? </strong></p>