Addresses are not account balances from which BTC amounts are deducted from. Addresses are only shorthand specifiers for an output script. The amount actually comes from UTXOs, each of which has a script which may correspond to an address.
The address the amount being spent (including fees) will "come from" depends on the UTXOs. Address A could have a balance of 0.1 BTC, but this could be composed of several UTXOs whose amounts sum to 0.1. The same applies to address B.
If there are only 2 UTXOs, one for address A of 0.1 BTC, and one for address B of 0.15 BTC, then the transaction will likely contain one input of the UTXO for address B and create a change output. UTXOs cannot be partially spent, so if the UTXO for A is chosen, then the UTXO for B must also be chosen as A does not have enough to cover the fee. This will also result in a change output.
The only scenario where there is no change output is if there are multiple UTXOs for each address and these can be combined in some way to sum to exactly the amount being sent.