Apologies for the very slow reply!
I don’t have an answer for you on how the different joining pipelines compare. We started with
vsearch join-pairs in QIIME 2 because we had already developed wrappers for other
vsearch functionality, so it was easy for us to add. We intended to implement some others, but it never got very high on our priority list because we had our two main use cases, joining with denoising (via
dada2 denoise-paired) and without denoising (via
vsearch join-pairs), covered. Sorry to not have a better answer!
If you end up comparing results from different paired end read joining methods, we’d love to hear about the results. This document illustrates how to import reads that have been joined with other pipelines, if that’s something you’re interested in exploring.