To settle the matter for my own benefit, I create an Apex test to validate my assumptions. What I learned and confirmed were the following:
- Only one of Trigger.isUpdate, Trigger.isDelete and Trigger.isUndelete will ever be true during trigger execution. This means that the three operations are indeed distinct and constitute different trigger contexts.
- The ALL ROWS keyword is required to retrieve soft-deleted records that are in the Recycle Bin
Below are the trigger and its test class I used.