code: func (la *LogicalApply) deCorColFromEqExpr(expr expression.Expression) expression.Expression {
  	sf, ok := expr.(*expression.ScalarFunction)
  	if !ok || sf.FuncName.L != ast.EQ {
  		return nil
  	}
  	if col, lOk := sf.GetArgs()[0].(*expression.Column); lOk {
  		if corCol, rOk := sf.GetArgs()[1].(*expression.CorrelatedColumn); rOk {
  			ret := corCol.Decorrelate(la.Schema())
  			if _, ok := ret.(*expression.CorrelatedColumn); ok {
  				return nil
  			}
  			// We should make sure that the equal condition's left side is the join's left join key, right is the right key.
  			return expression.NewFunctionInternal(la.ctx, ast.EQ, types.NewFieldType(mysql.TypeTiny), ret, col)
  		}
  	}
  	if corCol, lOk := sf.GetArgs()[0].(*expression.CorrelatedColumn); lOk {
  		if col, rOk := sf.GetArgs()[1].(*expression.Column); rOk {
  			ret := corCol.Decorrelate(la.Schema())
  			if _, ok := ret.(*expression.CorrelatedColumn); ok {
  				return nil
  			}
  			// We should make sure that the equal condition's left side is the join's left join key, right is the right key.
  			return expression.NewFunctionInternal(la.ctx, ast.EQ, types.NewFieldType(mysql.TypeTiny), ret, col)
  		}
  	}
  	return nil
  }
docs: // deCorColFromEqExpr checks whether it's an equal condition of form `col = correlated col`. If so we will change the decorrelated
  // column to normal column to make a new equal condition.