I was surprised in working on a Blender problem recently to find that matrix multiplication doesn't seem to be distributive:
>>> bpy.data.objects["Camera"].matrix_world
Matrix(((0.7071065306663513, -0.5, 0.5000001788139343, 11.922225952148438),
(0.7071070075035095, 0.49999985098838806, -0.4999997019767761, -16.922224044799805),
(-1.6974146888060204e-07, 0.7071067094802856, 0.7071067094802856, 8.609989166259766),
(0.0, 0.0, 0.0, 1.0)))
>>> top_verts
[Vector((-0.7777432203292847, 0.7777432203292847, -1.0)), Vector((0.7777432203292847, 0.7777432203292847, -1.0))]
>>> bpy.data.objects["Camera"].matrix_world @ (top_verts[1] - top_verts[0])
Vector((13.022120475769043, -15.822328567504883, 8.609989166259766))
>>> bpy.data.objects["Camera"].matrix_world @ top_verts[1] - bpy.data.objects["Camera"].matrix_world @ top_verts[0]
Vector((1.0998945236206055, 1.0998945236206055, -9.5367431640625e-07))
Why is this the case?