NULL is special in that it represents an "unknown" value. This can't be compared to numbers (or any other value for that matter), hence the result -
Is NULL <> 4? The answer is - don't know. Is 4 different from an unknown value?
Try this instead:
SELECT * FROM bla WHERE fk <> 4 OR FK IS NULL