Noticed today that on bindings that include a tag that is a query tag/dataset datetype, the (perspective) binding fires every time the tag group fires even if the value is the same. It was a bit of a surprise as this behavior doesnt happen on other datatypes (integer/ string/ etc.). I imagine this is because its easy to compare the value there to see if its changed, and more intensive to do so on a dataset.
Is it the expected behavioor that a query tag of dataset type should fire a binding every time that tag group runs, even if the value of the tag did not change?
Yes, because even though the content of the dataset is the same, it is a new dataset object, and that is the test for equality. This is true for the document datatype, too.
Use a memory tag instead of an expression tag. Construct/query your dataset in a timer script and check the contents yourself, skipping the write to the memory tag if equal. (Using your definition of equal.)
You might find certain helpful functions for this over here: