code: function _join(table, first) {
      var join;
      var joinType = this._joinType();
      if (typeof first === 'function') {
        join = new JoinClause(table, joinType);
        first.call(join, join);
        this._statements.push(join);
        return this;
      }
      if (joinType === 'raw') {
        join = new JoinClause(this.client.raw(table, first), 'raw');
        this._statements.push(join);
        return this;
      }
  
      join = new JoinClause(table, joinType);
      if (arguments.length > 1) {
        join.on.apply(join, normalizeArr.apply(null, arguments).slice(1));
      }
      this._statements.push(join);
      return this;
    }
docs: Adds a join clause to the query, allowing for advanced joins with an anonymous function as the second argument. function(table, first, operator, second)