ENH: semi joins
- [x] closes #42784
- [x] [Tests added and passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#writing-tests) if fixing a bug or adding a new feature
- [x] All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit).
- [x] Added [type annotations](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#type-hints) to new arguments/methods/functions.
- [x] Added an entry in the latest `doc/source/whatsnew/v2.1.0.rst` file if fixing a bug or adding a new feature.

This continues prior pull request #49661 which is currently closed.
I merged the changes from main into the development branch and moved the line added to the 2.0 release notes to the 2.1 release notes.

Besides moving the change to the v2.1.0 release notes, I only had to adjust the type definition of "MergeHow" compared to pull request #49661 to make the checks work. 

Can someone of you review this enhancement again so that we can merge it into the main branch?
@mroeschke @simonjayhawkins @rhshadrach 