If your wallet has a large UTXO pool with some variance in the values, it is often possible to find a combination of inputs that provide a matching amount to pay for recipient output and transaction fees. The range of matching amounts is larger than one might expect, when considering that it is cheaper to drop a negligible input excess to fees than to pay for creating and spending a change output.
This strategy is referred to as "change avoidance" and has multiple benefits:
- Smaller transaction: Each output adds 31–43 vbytes to a transaction. Avoiding a change output decreases the cost of a transaction (assuming the same weight of inputs).
- Reduced cost in the future: Every UTXO added to a wallet incurs the delayed cost of it being spent in the future. By avoiding the change output, there is one fewer UTXO that needs to be spend.
- Consolidating effect: Many services have an overhang of inbound payments and need to actively work on reducing their UTXO pool. Change avoidant transactions always reduce the number of UTXOs in a wallet (which is not the case for 1 input transactions with change).
- Slows growth of global UTXO set: Avoiding change means that there is one less UTXO added to be tracked by every full node on the network
- Improves privacy: Change address detection is a common tool in clustering addresses. Transactions that don't have a change output cannot be leveraged in this fashion, or might even confuse such approaches if they are mistaken for a self-send, or if there are multiple recipient outputs but no change output.
All of these benefits come at the one-time cost of some development effort, and slightly more computation for each input selection.
There are multiple wallets that employ coin selection algorithms which actively search for change avoidant input sets. One such algorithm with a detailed description is e.g. implemented in Bitcoin Core.
Disclaimer: The algorithm used by Bitcoin Core was proposed in my master's thesis, "An Evaluation of Coin Selection Strategies" (PDF).