That is because d can be either W or F. You are confusing two different things together.
The f in your original picture (i.e. ADDWF f, d) is for the register (or file) that is going to be operated on and can be a value between 0 and 0x7F. The d is the destination, which can be 0 or 1. If it is 0 the result is stored back in W, if it is 1 the result is stored back to the register you oprate on (i.e. the 0 - 0x7F).
In the datasheet 'f' is used to describe two different things.
In the processor header w and f are defined to 0 and 1 respectively to make assembly writing easier. It's easier to see what "addwf porta, w" does as opposed to "addwf porta, 0".