code: private Optional<ConcreteProposal> propose(InnerJoinNode joinNode, ImmutableMultimap<RelationPredicate, ExtensionalDataNode> initialDataNodeMap,
                                                 ImmutableList<Variable> priorityVariables,
                                                 IntermediateQuery query, DBMetadata dbMetadata)
              throws AtomUnificationException {
  
          ImmutableList.Builder<PredicateLevelProposal> proposalListBuilder = ImmutableList.builder();
  
          for (RelationPredicate predicate : initialDataNodeMap.keySet()) {
              ImmutableCollection<ExtensionalDataNode> initialNodes = initialDataNodeMap.get(predicate);
              Optional<PredicateLevelProposal> predicateProposal = proposePerPredicate(joinNode, initialNodes, predicate, dbMetadata,
                      priorityVariables, query);
              predicateProposal.ifPresent(proposalListBuilder::add);
          }
  
          return createConcreteProposal(proposalListBuilder.build(), priorityVariables);
      }
docs: Throws an AtomUnificationException when the results are guaranteed to be empty