Type $3E, the block type the game builds as moveable (
moveable_block), is pushable in
its flags like the table and the chest: when the player walks into it, the
collision code (
adj_dX_for_obj_intersect) copies his velocity into the block's. But the block's
handler,
upd_62, clears that velocity before it moves -- and the player is
object 0, so his push always comes earlier in the same frame. The push is
cancelled every time, and the block can only ever fall.
The table's handler does the same two things the other way round: it moves by
its velocity, then clears it (
upd_84), so a table steps along once for every
frame it is pushed. The chest's keeps its velocity, and slides on.
Watched in the emulator: a table placed in the player's path in room $8E was
pushed 28 units in 20 frames; the same table with its type changed to $3E did
not move at all, and the player stopped against it. See the pokes for a block
that moves.