Thanks Dan, I was actually wading through some of them when you replied. While there were some fixes to MakeTableView in 10.3 and 10.4, they seemed to deal with specific issues, e.g. when working on a .csv. I didn't see anything to indicate a broader fix.
I re-opened a ticket with Esri about this issue. For the sake of completeness in this thread, here's my piece of code that bombs ... this is a table and a feature class in a file geodatabase:
wellboretable = workspace + "tbl_wellbores"
wellbores = workspace + "wellbores"
arcpy.MakeTableView_management(wellboretable, "wellboretable_layer")
arcpy.AddJoin_management("wellboretable_layer", "UniqueId", wellbores, "UniqueId", "KEEP_ALL")
arcpy.SelectLayerByAttribute_management("wellboretable_layer", "NEW_SELECTION", "(\"tbl_wellbores.Deviation\" = '' OR \"tbl_wellbores.Deviation\" IS NULL) AND \"wellbores.Length_ft\" >= 3000")
Lest anyone thinks the syntax in the select statement is bad, I used GetCount_management, Exists, ListFields, and CopyRows_management to verify that data existed, the join worked, and the fields were typed accurately. I also tried using single and double quotes instead but still received an error. Interestingly, I noticed GetCount_management would return 0 after a bomb, so I used a CLEAR_SELECTION throughout my testing. To make this even simpler, I tried the following after the join:
arcpy.SelectLayerByAttribute_management("wellboretable_layer", "NEW_SELECTION", "\"tbl_wellbores.OBJECTID\" = 1")
... which still threw the same ERROR 000358. To be sure, I used a SearchCursor to verify that an OBJECTID of 1 exists in this table view. I emphasize that all of this code works fine in 10.1. I didn't spot anything in 10.3 (or 10.3.1) documentation that the SelectByAttribute syntax or SQL syntax had changed.
I'll see what Esri has to say.