anchor.diff:              |> optimizeRelationalCondition
   
           let (procRightModel, procJoinCondition, procValueBinders) =
  -            removeSelfJoins false leftModel rightModel conditionProc valueBinders
  +            removeSelfJoins leftModel rightModel conditionProc valueBinders
   
           {
               Model =
  
positive.code:     | Union (_, notModifiedModels) -> notModifiedModels |> List.forall isAlwaysTrueInNotModified
      | NotModified notModified -> isAlwaysTrueInNotModified notModified
  
  let private removeSelfJoins (isLeftJoin: bool) (leftModel: NotModifiedCalculusModel) (rightModel: NotModifiedCalculusModel) (joinCondition: Condition) (valueBinders: Map<SparqlVariable, ValueBinder>) =
      // Go source by source and remove them from right model if possible
      // * When removing a source replace all columns in conditions, assignments and value binders
      //   * When removing a column from value binder, in case that it is a last column from right
      //     model from the value binder (even from subpart), it is needed to add the join condition
      //     and all filters into it in case of left join.
  
      invalidOp "Can be further optimised"
  
  let private processJoin (typeIndexer: TypeIndexer) (leftJoinCondition: SparqlCondition option) (left: BoundCalculusModel) (right: BoundCalculusModel) =
      let isLeftJoin = leftJoinCondition.IsSome
  
negative.code: open Slp.Evi.Storage.Core.R2RML.MappingTemplate
  open Slp.Evi.Storage.Core.Common.Algebra
  open Slp.Evi.Storage.Core.Common.Database
  open System.Collections.Generic
  
  let rec private isBaseValueBinderBoundCondition neededVars =
      if neededVars |> Map.isEmpty then
  