What am I missing on my workflow trigger logic?

I need a workflow to trigger when one of a specific set of fields filled in when the record is first created, or is subsequently changed so I’ve created the following condition. The problem I am having is that when the record is first created it is firing, even when none of the nominated fields have been entered. I would have thought the ISNOTBLANK would have filtered those out but it hasn’t

Or([_THISROW_BEFORE].[Reprint] <> [_THISROW_AFTER].[Reprint]
,[_THISROW_BEFORE].[JSAs Required] <> [_THISROW_AFTER].[JSAs Required]
,AND(ISNOTBLANK([Specs Required])
,[_THISROW_BEFORE].[Specs Required] <> [_THISROW_AFTER].[Specs Required]
,[_THISROW_BEFORE].[Tasks] <> [_THISROW_AFTER].[Tasks]
,AND(ISNOTblank([Attachment 1])
,[_THISROW_BEFORE].[Attachment 1] <> [_THISROW_AFTER].[Attachment 1]
,AND(ISNOTblank([Attachment 2])
,[_THISROW_BEFORE].[Attachment 2] <> [_THISROW_AFTER].[Attachment 2]
,AND(ISNOTblank([Attachment 3])
,[_THISROW_BEFORE].[Attachment 3] <> [_THISROW_AFTER].[Attachment 3]

I believe, in general, it should not happen.

From the expression shared , it sounds that various AND() subexpressions have ultimately been ORed with [_THISROW_BEFORE].[Reprint] <> [_THISROW_AFTER].[Reprint]

So you may wish to verify if for some reason this [Reprint] crosscheck condition is causing the workflow to fire for some reason. Also you may wish to verify any specific reason you are not checking ISNOTBLANK() with this column?

If the [Reprint] is blank before and after, it will evaluate to true. Please refer the following section in the article below

When comparing before and after values, be aware of the following issue. If both the before and after values are empty, the following expression always return ‘true’.

[_THISROW_BEFORE].[Status] <> [_THISROW_AFTER].[Status]


And therein lies the answer. Thank you for that. Should have realised NULL never equals NULL, not even in MS Access