These are a great set of tests! I found the expected output pretty easy to read and understand, and they cover the main cases well.

A few more edge cases that could use a test:

- one or both sides are empty
- joined on values are different types (e.g. one is a string and one is a number)
- a joined on value is a nested object
- one joined on value is the string "null" and one is null (same with undefined)
- the input isn't sorted (could throw an error?)
- an item in an array isn't an object