  Supporting sampling in the presence of joins is an important problem in data
analysis, but is inherently challenging due to the need to avoid correlation
between output tuples. Current solutions provide either correlated or
non-correlated samples. Sampling might not always be feasible in the
non-correlated sampling-based approaches -- the sample size or intermediate
data size might be exceedingly large. On the other hand, a correlated sample
may not be representative of the join. This paper presents a \emph{unified}
strategy towards join sampling, while considering sample correlation every step
of the way. We provide two key contributions. First, in the case where a
\emph{correlated} sample is \emph{acceptable}, we provide techniques, for all
join types, to sample base relations so that their join is \emph{as random as
possible}. Second, in the case where a correlated sample is \emph{not
acceptable}, we provide enhancements to the state-of-the-art algorithms to
reduce their execution time and intermediate data size.
