  We study the complexity of various fundamental counting problems that arise
in the context of incomplete databases, i.e., relational databases that can
contain unknown values in the form of labeled nulls. Specifically, we assume
that the domains of these unknown values are finite and, for a Boolean query
$q$, we consider the following two problems: given as input an incomplete
database $D$, (a) return the number of completions of $D$ that satisfy $q$; or
(b) return the number of valuations of the nulls of $D$ yielding a completion
that satisfies $q$. We obtain dichotomies between \#P-hardness and
polynomial-time computability for these problems when $q$ is a self-join-free
conjunctive query, and study the impact on the complexity of the following two
restrictions: (1) every null occurs at most once in $D$ (what is called Codd
tables); and (2) the domain of each null is the same. Roughly speaking, we show
that counting completions is much harder than counting valuations: for
instance, while the latter is always in \#P, we prove that the former is not in
\#P under some widely believed theoretical complexity assumption. Moreover, we
find that both (1) and (2) can reduce the complexity of our problems. We also
study the approximability of these problems and show that, while counting
valuations always has a fully polynomial-time randomized approximation scheme
(FPRAS), in most cases counting completions does not. Finally, we consider more
expressive query languages and situate our problems with respect to known
complexity classes.
