diff --git a/packages/d3fc-data-join/src/dataJoin.js b/packages/d3fc-data-join/src/dataJoin.js
index <HASH>..<HASH> 100644
--- a/packages/d3fc-data-join/src/dataJoin.js
+++ b/packages/d3fc-data-join/src/dataJoin.js
@@ -23,9 +23,8 @@ export default (element, className) => {
     const dataJoin = function(container, data) {
         data = data || ((d) => d);
 
-        const selector = className == null ? element : `${element}.${className}`;
-        const selected = container.selectAll(selector)
-            .filter((d, i, nodes) => nodes[i].parentNode === container.node());
+        const selected = container.selectAll((d, i, nodes) => nodes[i].children)
+            .filter(className == null ? element : `${element}.${className}`);
         let update = selected.data(data, key);
 
         // N.B. insert() is used to create new elements, rather than append(). insert() behaves in a special manner
refactor: improve performance of child-only selector

Select children then post-filter to matching selector rather than select all matching descendents then post-filter to children.