This last slice shall show the difference of "expression oriented slicing" to "statement oriented slicing".
The function SideEffect defines (as a side-effect) the parameter i.
When we slice for the last statement of the program, we would only include the reaching definitions of j into the slice and the other parts that are included transitively. The function call of SideEffect within the expression of the right hand side of the assignment to l is included into the slice because it defines j. It furthermore uses the current value of j. Therefore the assignment to j is also included into the slice.
With statement oriented slicing we would have to include everything into the slice.