When you use a formula to apply conditional formatting, the formula is evaluated relative to the active cell in the selection at the time the rule is created. In this case, the rule is evaluated for each of the 20 cells in the two columns of data.
The references to $B2 and $C2 are "mixed" - the column is locked, but the row is relative - so only the row number will change as the formula is evaluated. Whenever two values in a row are not equal, the formula returns TRUE and the conditional formatting is applied.
A case-sensitive option
By the "equals to" and "not equals to" operators (= and <>) are not case-sensitive. If you need a case-sensitive comparison, you can use the EXACT function with NOT, like so:
Exact performs a case-sensitive comparison and returns TRUE when values match. NOT reverses this logic so that the formula returns TRUE only when the values don't match.
One problem with this approach is that if there is an extra or missing value in one column, or if the data is not sorted, many rows will be highlighted as different. Another approach is to count instances of column A values in column B and highlight values that don't exist.