How to fix the «Item (Magento\CatalogInventory\Model\Stock\Status\Interceptor) with the same ID already exists» Magento 2.2 bug?

Usually the Magento 2 team makes such bugs on Fridays, but today they have an unofficial holiday and looks like they are already drunk:

Exception #0 (Exception): Item (Magento/CatalogInventory/Model/Stock/Status/Interceptor) with the same ID "98" already exists.
#0 lib/internal/Magento/Framework/Data/AbstractSearchResult.php(233): Magento/Framework/Data/AbstractSearchResult->addItem(Object(Magento/CatalogInventory/Model/Stock/Status/Interceptor))
#1 lib/internal/Magento/Framework/Data/AbstractSearchResult.php(102): Magento/Framework/Data/AbstractSearchResult->load()
#2 app/code/Magento/CatalogInventoryConfigurableProduct/Plugin/GetInStockAttributeOptionsPlugin.php(62): Magento/Framework/Data/AbstractSearchResult->getItems()
#3 lib/internal/Magento/Framework/Interception/Interceptor.php(146): Magento/CatalogInventoryConfigurableProduct/Plugin/GetInStockAttributeOptionsPlugin->afterGetAttributeOptions(Object(Magento/ConfigurableProduct/Model/AttributeOptionProvider/Interceptor), Array, Object(Magento/Catalog/Model/ResourceModel/Eav/Attribute/Interceptor), '128')
#4 lib/internal/Magento/Framework/Interception/Interceptor.php(153): Magento/ConfigurableProduct/Model/AttributeOptionProvider/Interceptor->Magento/Framework/Interception/{closure}(Object(Magento/Catalog/Model/ResourceModel/Eav/Attribute/Interceptor), '128')
#5 generated/code/Magento/ConfigurableProduct/Model/AttributeOptionProvider/Interceptor.php(26): Magento/ConfigurableProduct/Model/AttributeOptionProvider/Interceptor->___callPlugins('getAttributeOpt...', Array, Array)
#6 generated/code/Magento/ConfigurableProduct/Model/AttributeOptionProvider/Proxy.php(95): Magento/ConfigurableProduct/Model/AttributeOptionProvider/Interceptor->getAttributeOptions(Object(Magento/Catalog/Model/ResourceModel/Eav/Attribute/Interceptor), '128')
#7 app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable.php(228): Magento/ConfigurableProduct/Model/AttributeOptionProvider/Proxy->getAttributeOptions(Object(Magento/Catalog/Model/ResourceModel/Eav/Attribute/Interceptor), '128')
#8 app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute/Collection.php(271): Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable->getAttributeOptions(Object(Magento/Catalog/Model/ResourceModel/Eav/Attribute/Interceptor), '128')
#9 app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute/Collection.php(173): Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute/Collection->loadOptions()
#10 lib/internal/Magento/Framework/Data/Collection/AbstractDb.php(586): Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute/Collection->_afterLoad()
#11 lib/internal/Magento/Framework/Data/Collection/AbstractDb.php(557): Magento/Framework/Data/Collection/AbstractDb->loadWithFilter(false, false)
#12 app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php(421): Magento/Framework/Data/Collection/AbstractDb->load()
#13 generated/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable/Interceptor.php(128): Magento/ConfigurableProduct/Model/Product/Type/Configurable->getConfigurableAttributes(Object(Magento/Catalog/Model/Product/Interceptor))
#14 app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php(393): Magento/ConfigurableProduct/Model/Product/Type/Configurable/Interceptor->getConfigurableAttributes(Object(Magento/Catalog/Model/Product/Interceptor))
#15 generated/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable/Interceptor.php(115): Magento/ConfigurableProduct/Model/Product/Type/Configurable->getUsedProductAttributes(Object(Magento/Catalog/Model/Product/Interceptor))
#16 app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php(551): Magento/ConfigurableProduct/Model/Product/Type/Configurable/Interceptor->getUsedProductAttributes(Object(Magento/Catalog/Model/Product/Interceptor))
#17 generated/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable/Interceptor.php(193): Magento/ConfigurableProduct/Model/Product/Type/Configurable->getUsedProducts(Object(Magento/Catalog/Model/Product/Interceptor), NULL)
#18 app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php(772): Magento/ConfigurableProduct/Model/Product/Type/Configurable/Interceptor->getUsedProducts(Object(Magento/Catalog/Model/Product/Interceptor))
#19 generated/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable/Interceptor.php(245): Magento/ConfigurableProduct/Model/Product/Type/Configurable->isSalable(Object(Magento/Catalog/Model/Product/Interceptor))
#20 app/code/Magento/Catalog/Model/Product.php(1642): Magento/ConfigurableProduct/Model/Product/Type/Configurable/Interceptor->isSalable(Object(Magento/Catalog/Model/Product/Interceptor))
#21 generated/code/Magento/Catalog/Model/Product/Interceptor.php(1025): Magento/Catalog/Model/Product->isAvailable()
#22 app/code/Magento/Catalog/Model/Product.php(1624): Magento/Catalog/Model/Product/Interceptor->isAvailable()
#23 generated/code/Magento/Catalog/Model/Product/Interceptor.php(1012): Magento/Catalog/Model/Product->isSalable()
#24 app/code/Magento/Sales/Model/Order.php(799): Magento/Catalog/Model/Product/Interceptor->isSalable()
#25 app/code/Magento/Sales/Model/Order.php(751): Magento/Sales/Model/Order->_canReorder(false)
#26 generated/code/Magento/Sales/Model/Order/Interceptor.php(258): Magento/Sales/Model/Order->canReorder()
#27 app/code/Magento/Sales/Helper/Reorder.php(80): Magento/Sales/Model/Order/Interceptor->canReorder()
#28 app/code/Magento/Sales/view/frontend/templates/order/info/buttons.phtml(12): Magento/Sales/Helper/Reorder->canReorder('414')

The bug is propduced by the new Magento_CatalogInventoryConfigurableProduct module.

The defect code is:

It produces the following SQL code for the $collection:

SELECT `main_table`.*, `cp_table`.`sku`, `cp_table`.`type_id` FROM `cataloginventory_stock_status` AS `main_table`
 INNER JOIN `catalog_product_entity` AS `cp_table` ON main_table.product_id = cp_table.entity_id WHERE (stock_status='1') AND (sku IN('New Very Prive-35-Almond', 'New Very Prive-35.5-Almond', 'New Very Prive-36-Almond', 'New Very Prive-36.5-Almond', 'New Very Prive-37-Almond', 'New Very Prive-37.5-Almond', 'New Very Prive-38-Almond', 'New Very Prive-38.5-Almond', 'New Very Prive-39-Almond', 'New Very Prive-39.5-Almond', 'New Very Prive-40-Almond', 'New Very Prive-40.5-Almond', 'New Very Prive-41-Almond', 'New Very Prive-41.5-Almond', 'New Very Prive-42-Almond', 'New Very Prive-35-Black', 'New Very Prive-35.5-Black', 'New Very Prive-36-Black', 'New Very Prive-36.5-Black', 'New Very Prive-37-Black', 'New Very Prive-37.5-Black', 'New Very Prive-38-Black', 'New Very Prive-38.5-Black', 'New Very Prive-39-Black', 'New Very Prive-39.5-Black', 'New Very Prive-40-Black', 'New Very Prive-40.5-Black', 'New Very Prive-41-Black', 'New Very Prive-41.5-Black', 'New Very Prive-42-Black'))

It leads to duplications in the result set’s product_id column:\

How to fix:

Locate the line:

Add the following code below:

/** @var \Magento\Framework\App\ObjectManager $om */
$om = \Magento\Framework\App\ObjectManager::getInstance();
/** @var \Magento\Store\Model\StoreManagerInterface $storeM */
$storeM = $om->get(\Magento\Store\Model\StoreManagerInterface::class);
$criteria->addFilter('website_id', 'website_id', $storeM->getStore()->getWebsiteId());