protected function visitSirelNodeJoin(Node\Join $join)
    {
        switch ($join->mode) {
            case Node\Join::INNER:
                $mode = "INNER";
                break;
            case Node\Join::LEFT:
                $mode = "LEFT";
                break;
            case Node\Join::LEFT_OUTER:
                $mode = "LEFT OUTER";
                break;
            case Node\Join::RIGHT:
                $mode = "RIGHT";
                break;
            case Node\Join::OUTER;
                $mode = "OUTER";
                break;
            default:
                $mode = '';
                break;
        }

        return ($join->natural ? 'NATURAL ' : '')
            . ($mode ? $mode . ' ' : '')
            . "JOIN "
            . $this->visit($join->left)
            . ($join->right ? ' ' . $this->visit($join->right) : '');
    }