  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 or 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) 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 randomized approximation scheme, in most cases
counting completions does not. Finally, we consider more expressive query
languages and situate our problems with respect to known complexity classes.
