From the CiA 301 (emphasis mine)
A 16-bit index is used to address all objects within the object
dictionary. In case of a simple variable the index references the
value of this variable directly. In case of records and
arrays however, the index addresses the whole data structure.
To allow individual elements of structures of data to be
accessed via the network a sub-index is defined. For single
object dictionary objects such as an UNSIGNED8, BOOLEAN,
INTEGER32 etc. the value for the sub-index is always 00h. For
complex object dictionary objects such as arrays or records
with multiple data fields the sub-index references fields
within a data-structure pointed to by the main index. The fields
accessed by the sub-index may be of differing data types.
So, sub-index value is used only for arrays and records and it's irrelevant for single values. I don't have experience with actual CANopen devices in the field, but I would expect them to accept sub-index 0x00 only or ignore it altogether for single variables.
Also note that there is at least one exception for the array/record sub-index 0x00 rule. Normally it represents the maximum index value of the record (I'm not sure if there can be gaps). But for RPDO/TPDO mapping parameter, it has special meaning and indicates which mapping entries are valid/active.