code: @Override
  	protected void computeOperatorSpecificDefaultEstimates(DataStatistics statistics) {
  		long card1 = getFirstPredecessorNode().getEstimatedNumRecords();
  		long card2 = getSecondPredecessorNode().getEstimatedNumRecords();
  		this.estimatedNumRecords = (card1 < 0 || card2 < 0) ? -1 : Math.max(card1, card2);
  		
  		if (this.estimatedNumRecords >= 0) {
  			float width1 = getFirstPredecessorNode().getEstimatedAvgWidthPerOutputRecord();
  			float width2 = getSecondPredecessorNode().getEstimatedAvgWidthPerOutputRecord();
  			float width = (width1 <= 0 || width2 <= 0) ? -1 : width1 + width2;
  			
  			if (width > 0) {
  				this.estimatedOutputSize = (long) (width * this.estimatedNumRecords);
  			}
  		}
  	}
docs: The default estimates build on the principle of inclusion: The smaller input key domain is included in the larger
  input key domain. We also assume that every key from the larger input has one join partner in the smaller input.
  The result cardinality is hence the larger one.