Basically you are questioning the usage of NULL in databases. How then do you handle the case of a numeric field which did not yet get an input, or where the value is not known? Assign 0 to it as default? Or 999? Or the famous date fields suddenly displaying the unknown birth date of a person as 0, i.e. as Dec-30 1899...
Not at all.
It has more to do with Database- resp. Table-design, and the Data it represents.
There are legitimate cases, where NULL actually really represents a Value in the real World.
IMO, a "classic" for that would bei a "Price" --> "I created a new Item in the Table, but i have no idea about the price, yet"
--> a Default of "0" would be very wrong for this, since "0.00" is a valid price (Think of having "Give-Aways" in your records)
Here a NULL can help you "You have to set a Price"
Another classic would be "Middle-Name" for a Person's Data (though one can argue to DEFAULT to an empty String)
Another classic is "Gender" for a Person's Data --> Think Person's Data, where you can't derive a Person's Gender from the Rest of the Data
--> e.g. FirstName = "Chris" --> is that male, female or whatever else?
The same with "DateOfBirth" --> that one is definitly a classic for DEFAULT NULL, as in "DoB unknown on creation of record"
OTOH, let's say there is also a Column called "QuantityOnStock", which would be an Integer or Float (if you have fractions).
If i create a new Record for an item that Column "QuantityOnStock" is a part of the Record, what Purpose, what Information would a NULL represent in the real world? None!
The "Physics" of it: The Quantity for that Item is "0" (not NULL). Always! At exactly that point in Time the record is created
My Paradigm is always: What's the "Physics" behind the Information a Column has to represent? What is happening in the real world?
So in my example:
Column "QuantityOnStock" --> NOT NULL DEFAULT 0
Column Price --> DEFAULT NULL
I've done enough SQL in the last 20 years to know, that special care has to be applied to anything that can result in a Database-NULL
The "Usage" (for lack of a better term) of Database-NULL's is in 99% of cases for OUTER JOINS (e.g. LEFT JOINS).
Some other things people tend to "forget":
1) you cannot filter "directly" on a NULL ("...WHERE SomeField=NULL") --> You have to use specific Syntax
This also implies direct comparison -->
You can't compare NULL-Values ("...WHERE FirstFieldThatIsNULL=SecondFieldThatIsNull") --> This will never return records
2) You cannot use "NULL" as a Parameter-Value (!!)
Everything said:
It always depends on the "Entity" a Table is representing, and thusly what the Attributes (Columns) are representing in the real world.
And my "grievance" with those Booleans DEFAULT NULL was specific to OP's Table-Design, not a "general" Opinion
(though i stay with my "Boolean NULL is nonsense").
The "Physics" of those 3 Boolean-Fields in OP's table,
ARE 2 possible states (and not 3)
I'm not against NULL's, it's just that i haven't come across a scenario i could see a legitimate use of a BOOLEAN DEFAULT NULL