|
|
|
|
|
by mrkeen
520 days ago
|
|
> No, it means you haven't gathered this data point and don't know. This is how it should be. > Somehow means he owns a car because you are using boolean logic? This is how it unfortunately is. There are 3 people, and there are 3 people who don't have a NULL car. Therefore George has a car. CREATE TABLE people(name text, carId uuid);
INSERT INTO people values('Bill', '40c8a2d7-1eb9-40a9-b064-da358d6cee2b');
INSERT INTO people values('Fred', '3446364a-e4a5-400f-bb67-cbcac5dc2254');
INSERT INTO people values('George', NULL);
SELECT Count(*) FROM people WHERE name NOT IN (
SELECT name FROM people WHERE carId = NULL
);
Elsewhere people have argued that NULL propagates, so that your small unknowns infect larger queries. I could get behind that line of thinking, but the query above confidently returns 3. |
|
This is not what you are asking with your query: as someone else stated, NULL is meant to be "UNKNOWN", or "it could be any valid value".
So nothing is ever equal to something that can be anything, because even another NULL (i.e. unknown) value is in general different.
So in the line
the condition will always be false. Now if instead if meant to search for the rows where carId is actually unknown you have to write And your query will return as one may expect 2.