'Construct a new :class:`.Join`.
The usual entrypoint here is the :func:`~.expression.join`
function or the :meth:`.FromClause.join` method of any
:class:`.FromClause` object.'

def __init__(self, left, right, onclause=None, isouter=False):

    self.left = _interpret_as_from(left)
    self.right = _interpret_as_from(right).self_group()
    if (onclause is None):
        self.onclause = self._match_primaries(self.left, self.right)
    else:
        self.onclause = onclause
    self.isouter = isouter
