It is certainly possible and there are many successful databases designed without nulls. That does
not mean using some value as a default or "surrogate null"; it simply means taking the fact-based modelling approach (e.g. see Halpin/Nijssen). Each table models a set of propositions which are understood to be true propositions (facts). If some proposition doesn't include a value for X then that proposition rightly belongs in a table which doesn't have attribute X. That is the model implied by correct application of Normal Form in database design.
Sometimes for various reasons database designers choose to deviate from Fifth Normal Form by adding nullable attributes to a database design. In those cases nulls are a purely technical feature
added to the original and accurate representation of the business domain - a representation which did not have nulls. Nulls aren't part of the reality being modelled, they are part of its technical implementation.
In this thread I've talked about nulls in the SQL sense of the word because that's what null means in SQL DBMSs and other systems (like Access/Jet) that are derived from the SQL model.
Science and maths modelled the world accurately without nulls for thousands of years before the invention of nulls in 1970s databases. Science and maths continue to do so today without using anything like nulls. SQL nulls certainly are not something implied by logic or set theory. As you may know, the relational model is founded on set theory and first order logic and does not include nulls (Codd 1969,1970). Codd much later proposed nulls marks as part of an "extended" version of the relational model. They aren't required and are not even possible in the relational model proper.
I notice in
this post you say that null is "based on" the meaning of null in set theory. It's true that "null set" is an alternative name for the
empty set in set theory. That has nothing to do with SQL-style or Codd-style nulls however. Codd makes it crystal clear that nulls are
marks, not values or sets of values and that null marks are completely distinct from all other values including the empty set. Empty sets are properly supported in the relational model and are quite distinct from nulls even in Codd’s proposed extension of that model. The empty set has the important property of being equal to itself and different from other sets, i.e. X=X is true and X=X’ is false if X is the empty set. That’s not the case if X is null because null is not a set or a value and is nothing like the empty set.
Null and the empty set are concepts distinct from each other in SQL just as they are distinct concepts in relational theory, but because the SQL model of data is not truly relational it doesn't properly support empty sets in all the (non-null) ways that the relational model does. It is extremely unfortunate that the word "null" in set theory is used to describe the empty set but the same word is used in SQL to mean something completely different and unrelated. Keeping the concept of null apart from non-nulls and sets of values (empty or otherwise) is one of the things that students of database theory are supposed to learn. If, when you wrote that historical post, you thought that SQL’s null or Codd’s null was based on or similar to the empty set then I respectfully suggest that you hadn’t properly understood the relational model. I realise it was written more than six years ago.
In the same post you also say that Codd clearly thought multiple null marks were similar to multiple infinities. I seriously doubt it. The relational model and its implementations are finite systems. The only apparent parallel between null marks and infinity is the superficial one that there is more than one kind of each. Codd was proven wrong about there being only two possible versions of nulls. Hundreds have been proposed since then but they suffered much the same fate as Codd’s proposal: never widely accepted and seldom used outside of an extremely limited academic setting. The only kind of null that matters in data management practice is the SQL kind and that is what myself and many others (including DBMS vendors like Microsoft in their official
documentation) recommend should be avoided or at least kept to a minimum.
I mention your old post only because I recently found it linked on another site where some confusions about nulls were being made. I wondered if your views might have changed since then.